连接数据库:

1 string dataDir = AppDomain.CurrentDomain.BaseDirectory;
2             if (dataDir.EndsWith(@"\bin\Debug\")
3                 || dataDir.EndsWith(@"\bin\Release\"))
4             {
5                 dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
6                 AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
7             }

连接字符串中的DataDirectory的值就是通过AppDomain.CurrentDomain.SetData赋值过去的,如果当前程序的目录以"\bin\Debug\"或者"\bin\Release\"则认为它是运行在VisualStudio环境中,就取项目的目录然后赋值给DataDirectory这个key。既然是CurrentDomain.SetData,估计对于非默认AppDomain中的数据库连接代码可能会不起作用(只是猜测,没验证),这就要需要创建子AppDomain的时候再去赋值了。(来自如鹏网)
连接字符串:

1 using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
2 AttachDBFilename=|DataDirectory|\QQrobot.mdf;integrated Security=True;
3 User instance=True"))//使用USING避免使用后dispose和close关闭连接的麻烦,使用using会自动调用dispose,这是垃圾自动回收机制
4             {
5                 conn.Open();//打开连接
6 
7

 创建SQL语句:

1  using (SqlCommand cmd = conn.CreateCommand())
2                 {

课后总结练习作品-聊天机器人SQL版:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Data.SqlClient;
  6 
  7 namespace 聊天机器人_SQL版
  8 {
  9     class Program
 10     {
 11         static void Main(string[] args)
 12         {
 13             string dataDir = AppDomain.CurrentDomain.BaseDirectory;
 14             if (dataDir.EndsWith(@"\bin\Debug\")
 15                 || dataDir.EndsWith(@"\bin\Release\"))
 16             {
 17                 dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
 18                 AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
 19             }
 20             Console.WriteLine("连接数据库中...");
 21             using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
 22 AttachDBFilename=|DataDirectory|\QQrobot.mdf;integrated Security=True;
 23 User instance=True"))
 24             {
 25                 conn.Open();
 26                 Console.Clear();
 27                 Console.WriteLine("数据库连接成功!");
 28                 using (SqlCommand cmd = conn.CreateCommand())
 29                 {
 30                     //判断是否存在数据表,是则问好。否则创建
 31                     try
 32                     {
 33                         cmd.CommandText = "select * from T_robot";
 34                         using (SqlDataReader reader = cmd.ExecuteReader())
 35                         {
 36                             if (reader.Read())
 37                             {
 38                                 Console.Clear();
 39                                 Console.WriteLine("你好,我叫{0}。很高兴能和你聊天!!",
 40                                     reader.GetString(reader.GetOrdinal("Fname")));
 41                             }
 42                         }
 43                     }
 44                     catch
 45                     {
 46 
 47                         Console.Clear();
 48                         Console.WriteLine("第一次使用,请输入你的机器人的名字:");
 49                         string name = Console.ReadLine();
 50                         Console.Clear();
 51                         Console.WriteLine("初始化中...");
 52                         cmd.CommandText = "Create Table [T_robot](Id int not null,Fname nvarchar(50))";
 53                         cmd.ExecuteNonQuery();
 54                         cmd.CommandText = "insert into [T_robot](Id,Fname) values(1,N'" + name + "')";
 55                         cmd.ExecuteNonQuery();
 56                         cmd.CommandText = "Create Table [T_Message](Fquery nvarchar(MAX),Fanser nvarchar(MAX))";
 57                         cmd.ExecuteNonQuery();
 58                         cmd.CommandText = "insert into [T_Message](Fquery,Fanser) values(N'你好',N'你好,请问有什么可以帮你呢?')";
 59                         cmd.ExecuteNonQuery();
 60                         cmd.CommandText = "insert into [T_Message](Fquery,Fanser) values(N'你叫什么名字',N'我叫" + name + "')";
 61                         cmd.ExecuteNonQuery();
 62                         cmd.CommandText = "insert into [T_Message](Fquery,Fanser) values(N'今天天气怎么样?',N'今天天气很好!')";
 63                         cmd.ExecuteNonQuery();
 64                         cmd.CommandText = "insert into [T_Message](Fquery,Fanser) values(N'帮助',N'\\t帮助菜单\n1.帮助-帮助\n2.添加-添加对话\n3.改名-修改机器人名字\n4.退出-退出程序')";
 65                         cmd.ExecuteNonQuery();
 66                         cmd.CommandText = "insert into [T_Message](Fquery,Fanser) values(N'你在哪里?',N'我就在你身边...')";
 67                         cmd.ExecuteNonQuery();
 68                         cmd.CommandText = "insert into [T_Message](Fquery,Fanser) values(N'你有女朋友了吗?',N'年龄太小,暂时不讨论这个问题!')";
 69                         cmd.ExecuteNonQuery();
 70                         Console.Clear();
 71                         Console.WriteLine("初始化完成!,可以聊天了!");
 72                         Console.ReadKey();
 73                     }
 74 
 75                     //聊天开始
 76                     string query;
 77                     do
 78                     {
 79                         query = Console.ReadLine();
 80                         if (query != "退出" && query != "添加" && query != "改名")
 81                         {
 82                             string query2 = "", anser = "";
 83                             cmd.CommandText = "select * from T_Message where Fquery like'%" + query + "%'";
 84                             using (SqlDataReader reader = cmd.ExecuteReader())
 85                             {
 86                                 if (reader.Read())
 87                                 {
 88                                     query2 = reader.GetString(reader.GetOrdinal("Fquery"));
 89                                     anser = reader.GetString(reader.GetOrdinal("Fanser"));
 90                                 }
 91                             }
 92                             if (query2.Contains(query) && anser != "")
 93                             {
 94                                 Console.WriteLine(anser);
 95                             }
 96                             else
 97                             {
 98                                 Console.WriteLine("听不懂你说的话,你是火星来的吧?");
 99                             }
100                         }
101                         else if (query == "添加")
102                         {
103                             string data = "";
104                             do
105                             {
106                                 Console.WriteLine("输入你要增加的数据。格式如下\n问题 答案\n如果增加完成请输入完成。");
107                                 data = Console.ReadLine();
108                                 Console.Clear();
109                                 if (data != "完成")
110                                 {
111                                     try
112                                     {
113                                         string[] datae = data.Split(new string[] { " " },
114                                             StringSplitOptions.RemoveEmptyEntries);
115                                         cmd.CommandText = "insert into T_Message(Fquery,Fanser)Values(N'" + datae[0] + "',N'" + datae[1] + "')";
116                                         cmd.ExecuteNonQuery();
117                                         Console.WriteLine("数据添加成功!");
118                                     }
119                                     catch
120                                     {
121                                         Console.WriteLine("数据有误!");
122                                     }
123                                 }
124                                 else
125                                 {
126                                     Console.WriteLine("可以继续聊天了!");
127                                 }
128                             }
129                             while (data != "完成");
130                         }
131                         else if (query == "改名")
132                         {
133                             Console.WriteLine("输入你的机器人的名字:");
134                             string name = Console.ReadLine();
135                             cmd.CommandText = "UPDATE T_robot SET Fname = '"+name+"' WHERE Id = 1 ";
136                             cmd.ExecuteNonQuery();
137                             cmd.CommandText = "UPDATE T_Message SET Fanser = N'我叫" + name + "' WHERE Fquery = N'你叫什么名字' ";
138                             cmd.ExecuteNonQuery();
139                             Console.WriteLine("机器人名字修改成功!");
140                         }
141                         
142                     }while(query!="退出");
143                     
144                 }
145             }
146         }
147     }
148 }

效果图: