[点晴永久免费OA]C#操作SQL Server数据库
当前位置:点晴教程→点晴OA办公管理信息系统
→『 经验分享&问题答疑 』
1、概述ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤:
对返回“结果”的操作可以分为两类:
两者比较:
一张十分出名的ADO.NET结构图: 2、连接字符串的写法string connectString = "Data Source=.;Initial Catalog=Student;Integrated Security=True"; 3、SqlConnection对象命名空间:System.Data.SqlClient.SqlConnection; 返回数据库连接对象,参数字符串。实例化“连接对象”,并打开连接 SqlConnection sqlCnt = new SqlConnection(connectString); sqlCnt.Open(); 使用完成后,需要关闭“连接对象” sqlCnt.Close(); 4、SqlCommand对象命名空间:System.Data.SqlClient.SqlCommand; SqlCommand对象用于执行数据库操作,操作方式有三种:
实例化一个SqlCommand对象 SqlCommand command = new SqlCommand(); command.Connection = sqlCnt; // 绑定SqlConnection对象 或直接从SqlConnection创建 SqlCommand command = sqlCnt.CreateCommand(); 常用方法:
常用操作① 执行SQLSqlCommand cmd = conn.CreateCommand(); //创建SqlCommand对象 cmd.CommandType = CommandType.Text; cmd.CommandText = "select * from products = @ID"; //sql语句 cmd.Parameters.Add("@ID", SqlDbType.Int); cmd.Parameters["@ID"].Value = 1; //给参数sql语句的参数赋值 ② 调用存储过程SqlCommand cmd = conn.CreateCommand(); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandText = "存储过程名"; ③ 整张表SqlCommand cmd = conn.CreateCommand(); cmd.CommandType = System.Data.CommandType.TableDirect; cmd.CommandText = "表名" 5、SqlDataReader对象命名空间:System.Data.SqlClient.SqlDataReader; SqlDataReader对象提供只读单向数据的功能,单向:只能依次读取下一条数据;只读:DataReader中的数据是只读的,不能修改;相对地DataSet中的数据可以任意读取和修改. 它有一个很重要的方法,是Read(),返回值是个布尔值,作用是前进到下一条数据,一条条的返回数据,当布尔值为真时执行,为假时跳出。如 SqlCommand command = new SqlCommand(); command.Connection = sqlCnt; command.CommandType = CommandType.Text; command.CommandText = "Select * from Users"; SqlDataReader reader = command.ExecuteReader(); //执行SQL,返回一个“流” while (reader.Read()) { Console.Write(reader["username"]); // 打印出每个用户的用户名 } 6、DataSet对象6.1 SqlDataAdapter;命名空间:System.Data.SqlClient.SqlDataAdapter; SqlDataAdapter是SqlCommand和DataSet之间的桥梁,实例化SqlDataAdapter对象: SqlConnection sqlCnt = new SqlConnection(connectString); sqlCnt.Open(); // 创建SqlCommand SqlCommand mySqlCommand = new SqlCommand(); mySqlCommand.CommandType = CommandType.Text; mySqlCommand.CommandText = "select * from product"; mySqlCommand.Connection = sqlCnt; // 创建SqlDataAdapter SqlDataAdapter myDataAdapter = new SqlDataAdapter(); myDataAdapter.SelectCommand = mySqlCommand; // 为SqlDataAdapter对象绑定所要执行的SqlCommand对象 上述SQL可以简化为 SqlConnection sqlCnt = new SqlConnection(connectString); sqlCnt.Open(); // 隐藏了SqlCommand对象的定义,同时隐藏了SqlCommand对象与SqlDataAdapter对象的绑定 SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from product", sqlCnt); 属性和方法
6.2 SqlCommandBuilder;命名空间:System.Data.SqlClient.SqlCommandBuilder。 对DataSet的操作(更改、增加、删除)仅是在本地修改,若要提交到“数据库”中则需要SqlCommandBuilder对象。用于在客户端编辑完数据后,整体一次更新数据。具体用法如下: SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter); // 为myDataAdapter赋予SqlCommandBuilder功能 myDataAdapter.Update(myDataSet, "表名"); // 向数据库提交更改后的DataSet,第二个参数为DataSet中的存储表名,并非数据库中真实的表名(二者在多数情况下一致)。 6.3 DataSet命名空间:System.Data.DataSet。 数据集,本地微型数据库,可以存储多张表。 使用DataSet第一步就是将SqlDataAdapter返回的数据集(表)填充到Dataset对象中: SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from product", sqlCnt); DataSet myDataSet = new DataSet(); // 创建DataSet myDataAdapter.Fill(myDataSet, "product"); // 将返回的数据集作为“表”填入DataSet中,表名可以与数据库真实的表名不同,并不影响后续的增、删、改等操作 ① 访问DataSet中的数据SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from product", sqlCnt); DataSet myDataSet = new DataSet(); myDataAdapter.Fill(myDataSet, "product"); DataTable myTable = myDataSet.Tables["product"]; foreach (DataRow myRow in myTable.Rows) { foreach (DataColumn myColumn in myTable.Columns) { Console.WriteLine(myRow[myColumn]); //遍历表中的每个单元格 } } ② 修改DataSet中的数据SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from product", sqlCnt); DataSet myDataSet = new DataSet(); myDataAdapter.Fill(myDataSet, "product"); // 修改DataSet DataTable myTable = myDataSet.Tables["product"]; foreach (DataRow myRow in myTable.Rows) { myRow["name"] = myRow["name"] + "商品"; } // 将DataSet的修改提交至“数据库” SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter); myDataAdapter.Update(myDataSet, "product"); 注意:在修改、删除等操作中表product必须定义主键,select的字段中也必须包含主键,否则会提示“对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。”错误 ③ 增加一行SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from product", sqlCnt); DataSet myDataSet = new DataSet(); myDataAdapter.Fill(myDataSet, "product"); DataTable myTable = myDataSet.Tables["product"]; // 添加一行 DataRow myRow = myTable.NewRow(); myRow["name"] = "捷安特"; myRow["price"] = 13.2; //myRow["id"] = 100; id若为“自动增长”,此处可以不设置,即便设置也无效 myTable.Rows.Add(myRow); // 将DataSet的修改提交至“数据库” SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter); myDataAdapter.Update(myDataSet, "product"); ④ 删除一行SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from product", sqlCnt); DataSet myDataSet = new DataSet(); myDataAdapter.Fill(myDataSet, "product"); // 删除第一行 DataTable myTable = myDataSet.Tables["product"]; myTable.Rows[0].Delete(); SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter); myDataAdapter.Update(myDataSet, "product"); 属性
方法
7、释放资源资源使用完毕后应及时关闭连接和释放,具体方法如下: myDataSet.Dispose(); // 释放DataSet对象 myDataAdapter.Dispose(); // 释放SqlDataAdapter对象 myDataReader.Dispose(); // 释放SqlDataReader对象 sqlCnt.Close(); // 关闭数据库连接 sqlCnt.Dispose(); // 释放数据库连接对象
该文章在 2017/4/18 0:33:29 编辑过 |
关键字查询
相关文章
正在查询... |