连接数据库:
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 }
效果图:

浙公网安备 33010602011771号