WPF之数据库的连接和简单操作
SqlServer
如何创建SqlServer的用户和设置SqlServer的权限,可在文章[Qt连接SQL Server数据库]找到如何操作
SqlConnection
SqlConnection表示到SqlServer的打开连接,看如下代码
SqlConnection conn = new SqlConnection("Server=.;Database=BookDB;user id=user_b;pwd=532133921")
该代码实例化了一个SqlConnection类,则对象conn可以用来表示数据库对象。
各个参数的含义:
Server:表示连接的服务器,.表示连接本地的服务器。
DataBase:表示连接的数据库。
user id:表示连接的用户名;pwd:表示用户名的密码。
在创建完对象后,可以用conn.Open()语句来打开数据库。
SqlCommand
SqlCommand表示对SqlServer执行的一个Sql语句或存储过程,即对数据库的操作,看如下代码
1 2 3 4 5 6 7 using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from S where _STATUS=@STATUS"; cmd.Parameters.Add(new SqlParameter("@STATUS", 120)); string i = (string)cmd.ExecuteScalar(); MessageBox.Show(i.ToString()); }
首先获取数据库conn的SqlCommand,即SqlCommand cmd = conn.CreateCommand()。
对cmd的CommandText属性进行赋值,该属性表示要执行的C#Sql语句。
在cmd的Parameters属性中添加@参数,cmd.Parameters.Add(new SqlParameter(“@STATUS”, 120)),即当语句执行时@STATUS会换成120。
使用cmd的执行方法ExecuteXXX()来执行Sql语句,不同的执行方法会有不同的效果。
SqlDataReader
SqlDataReader提供了一种从数据库读取行的只进流的方式。
1 2 3 4 5 6 7 8 9 10 11 using (SqlDataReader reader = cmd.ExecuteReader()) { //查询结果只放在数据库中,没传到客户端, //初始指针指向第一条数据之前,没调用一次Reader指针下移一条,直至最后一条退出循环 while (reader.Read()) { //GetXXX(n):n表示获取数据库表中的第n列 //Console.WriteLine(reader.GetString(0)+reader.GetString(1)+reader.GetString(2)); Jlist.Add(new J(reader.GetString(0), reader.GetString(1), reader.GetString(2))); } }
SqlDataReader reader = cmd.ExecuteReader(),当cmd中的Sql语句执行后返回了多行结果,则可用ExecuteReader方法执行并返回一个读取器,即reader是一个读取器,可以用来读取返回的结果
DataSet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 cmd.CommandText = "select * from S where _STATUS=@STATUS"; cmd.Parameters.Add(new SqlParameter("@STATUS", 120)); //SqlDataAdapter是一个帮我们把SqlCommand查询结果填充到DataSet SqlDataAdapter adapter = new SqlDataAdapter(cmd); //DataSet相当于项目中一个复杂集合 DataSet data = new DataSet(); //adapter.Fill相当于执行了sql语句和把查询结果填充到data中 adapter.Fill(data); ////导出data中的第一个查询结果表,一般也只有一个表 //DataTable table = data.Tables[0]; ////定义一个集合存储表中的各行 //DataRowCollection rows = table.Rows; //也可以这么写 DataRowCollection rows = data.Tables[0].Rows; for (int i = 0; i < rows.Count; ++i) { DataRow row = rows[i]; string sno = (string)row["SNO"]; string sname = (string)row["SNAME"]; Int16 status = (Int16)row["_STATUS"]; MessageBox.Show(sno+","+sname+","+status.ToString()); }
SqlDataAdapter adapter = new SqlDataAdapter(cmd);SqlDataAdapter类是专门用来填充DataSet并执行Sql语句的
adapter.Fill(data);将执行结果填充到DataSet变量中
在填充后,数据会被放在DataSet中的Table[]属性,Table[0]表示第一个表,一般也只有一个表;然后可以利用DataRowCollection来遍历此表
ConfigurationManager
当我们每一次连接数据库时,总是要写那一长串的连接信息,这样非常麻烦,用户也不易进行修改,则可以把连接信息写到App.config文件中,如下:
1 2 3 4 5 <configuration> <connectionStrings> <add name="dbConnStr" connectionString="Server=.;DataBase=...;user id=...;pwd=..."/> </connectionStrings> </configuration>
当你想要使用该配置信息时,可以创建ConfigurationManager对象来获取配置文件中的信息,即:(注意,ConfigurationManager需要引用System.Configuration程序集)
private static string connStr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;
SqlConnection conn = new SqlConnection(connStr)
SqlHelper
有时在写对数据库的操作时,总是要写一堆类似的执行语句代码,其实可以把对数据库的操作封装成一个类SqlHelper,如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 class SqlHelper { private static string connStr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString; /// <summary> /// 连接并打开数据库,执行sql语句。 /// </summary> /// <param name="sql">sql语句的主部分</param> /// <param name="parameters">sql语句的参数</param> /// <returns>受影响的行数</returns> public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); return cmd.ExecuteNonQuery(); } } } /// <summary> /// 连接并打开数据库,执行sql语句。 /// </summary> /// <param name="sql">sql语句的主部分</param> /// <param name="parameters">sql语句的参数</param> /// <returns>受影响的对象</returns> public static Object ExecuteScalar(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); return cmd.ExecuteScalar(); } } } /// <summary> /// 连接并打开数据库,执行sql语句。(要求SQL语句是查询结果的语句) /// </summary> /// <param name="sql">sql语句的主部分</param> /// <param name="parameters">sql语句的参数</param> /// <returns>查询结果的表结构</returns> public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataSet dataset = new DataSet(); adapter.Fill(dataset); return dataset.Tables[0]; } } } }
参考资料:b站