C#操作SQL Server数据库 - TOMMYHU - 专注互联网开发及运营技术,提供相关资料及软件下载,奇趣网络时事评论!
Feb 26

C#操作SQL Server数据库 不指定

tommyhu , 21:03 , ASP.NET , Comments(0) , Trackbacks(0) , Reads(3626) , Via Original Large | Medium | Small

ado.net提供了丰富的数据库操作,在这些操作中SqlConnection和SqlCommand类是必须使用的,但接下来可以分为两类操作:

        
  • 一类是用SqlDataReader直接一行一行的读取数据库。
  •     
  • 第二类是SqlDataAdapter联合DataSet来读取数据。

两者比较:

        
  • SqlDataReader由于是直接访问数据库,所以效率较高。但使用起来不方便。
  •     
  • SqlDataAdapter可以把数据库的数据缓存在内存中,以数据集的方式进行填充。这种方式使用起来更方,便简单。但性能较第一种稍微差一点。(在一般的情况下两者的性能可以忽略不计。)

1、SqlConnection;

命名空间:System.Data.SqlClient.SqlConnection;

返回数据库连接对象,参数字符串。该对象用于

        
  1. SqlConnection connection = new SqlConnection(connectString);  

2、 SqlCommand;

命名空间:System.Data.SqlClient.SqlCommand; 执行数据库操作,操作方式有三种:

        
  • SQL语句:command.CommandType = CommandType.Text;
  •     
  • 存储过程:command.CommandType = CommandType.StoredProcedure;
  •     
  • 整张表:command.CommandType = CommandType.TableDirect;

实例化一个SqlCommand对象

        
  1. SqlCommand command = new SqlCommand();  
  2.     
  3. command.Connection = sqlCnt;            // 绑定SqlConnection对象  

或直接从SqlConnection创建

        
  1. SqlCommand command = sqlCnt.CreateCommand();      

常用方法:

        
  • .ExecuteNonQuery: 执行费查询的SQL操作,如增、删、改。

常用操作

① 执行SQL
        
  1. SqlCommand cmd = conn.CreateCommand();              //SQL命令对象  
  2.     
  3. cmd.CommandType = CommandType.Text;  
  4.     
  5. cmd.CommandText = "select * from products = @ID";   //sql语句  
  6.     
  7. cmd.Parameters.Add("@ID", SqlDbType.Int);  
  8.     
  9. cmd.Parameters["@ID"].Value = 1;                    //给参数sql语句的参数赋值  
② 存储过程
        
  1. SqlCommand cmd = conn.CreateCommand();                        
  2.     
  3. cmd.CommandType = System.Data.CommandType.StoredProcedure;  
  4.     
  5. cmd.CommandText = "存储过程名";  
③ 整张表
        
  1. SqlCommand cmd = conn.CreateCommand();      
  2.     
  3. cmd.CommandType = System.Data.CommandType.TableDirect;  
  4.     
  5. cmd.CommandText = "表名"  

3、 SqlDataSet

数据集,可以存储多张表。命名空间:System.Data.DataSet。

属性

        
  • Tables:获取包含在DataSet中的表的集合。
  •     
  • Relations获取用于将表链接起来并允许从父表浏览到子表的关系的集合。
  •     
  • HasEroors表明是否已经初始化DataSet对象的值。

方法

        
  • Clear清除DataSet对象中所有表的所有数据。
  •     
  • Clone复制DataSet对象的结构到另外一个DataSet对象中,复制内容包括所有的结构、关系和约束,但不包含任何数据。
  •     
  • Copy复制DataSet对象的数据和结构到另外一个DataSet对象中。两个DataSet对象完全一样。
  •     
  • CreateDataReader为每个DataTable对象返回带有一个结果集的DataTableReader,顺序与Tables集合中表的显示顺序相同。
  •     
  • Dispose释放DataSet对象占用的资源。
  •     
  • Reset将DataSet对象初始化。

常用操作

① 访问DataSet中的数据并修改
        
  1. DataTable MyTable = MyDataSet.Tables["T_STUDENT"];  
  2.     
  3. //对表中的每一行记录进行循环  
  4.     
  5. foreach (DataRow MyRow in MyTable.Rows)  
  6.     
  7. {  
  8.     
  9.     //对每行记录中的每列进行循环  
  10.     
  11.     foreach (DataColumn MyColumn in MyTable.Columns)  
  12.     
  13.     {  
  14.     
  15.         //循环输出每列的数据  
  16.     
  17.        MyRow[MyColumn] = 100;               // 修改数据  
  18.     
  19.         Console.WriteLine(MyRow[MyColumn]);  
  20.     
  21.     }  
  22.     
  23. }  
② 增加一行
        
  1. DataTable MyTable = MyDataSet.Tables["T_STUDENT"];  
  2.     
  3. //定义数据行中各字段的值  
  4.     
  5. DataRow MyRow = MyTable.NewRow();  
  6.     
  7. MyRow["T_S_NAME"] = "陈?超?";  
  8.     
  9. MyRow["T_S_SEX"] = "男D";  
  10.     
  11. MyRow["T_S_BIRTHDAY"] = "1985-09-11";  
  12.     
  13. MyRow["T_S_ID"] = 2002080524;  
  14.     
  15. //在内存中的表对象中添加一个新行,但此时新行的内容没有更新到数据库中  
  16.     
  17. MyTable.Rows.Add(MyRow);  
  18.     
  19. //若更新到数据库可以使用SqlCommandBuilder   

③ 删除一行

        
  1. MyDataSet.Tables[0].Rows[i].Delete();  
  2.     
  3. MyDataSet.Tables[0].AcceptChange();  
  4.     
  5. //目前还不清楚数据是否更新到了数据库,应该要使用下SqlCommandBuilder   

4、 SqlDataAdapter;

命名空间:System.Data.SqlClient.SqlDataAdapter;

是数据库和DataSet之间的桥梁

实例化:

        
  1. SqlDataAdapter dataAdapter = new SqlDataAdapter();  
  2.     
  3. // 为dataAdapter绑定SqlCommand操作  
  4.     
  5. dataAdapter.fill(DataSet变量, "填充的表名");  

常用操作

        
  • fill:将执行结果填充到Dataset中,会隐藏打开SqlConnection并执行SQL等操作。
  •     
  • InsertCommand属性:SqlCommand变量,封装Insert语句;
  •     
  • UpdateCommand属性:SqlCommand变量,封装Update语句;
  •     
  • DeleteCommand属性:SqlCommand变量,封装Delete语句。

5、 SqlDataReader;

命名空间:System.Data.SqlClient.SqlDataReader;

datareader对象提供只读单向数据的快速传递,单向:您只能依次读取下一条数据;只读:DataReader中的数据是只读的,不能修改;相对地,DataSet中的数据可以任意读取和修改.

它有一个很重要的方法,是Read,是个布尔值,作用是前进到下一条数据,一条条的返回数据,当布尔值为真时执行,为假时跳出。如

        
  1. SqlCommand com = new SqlCommand();  
  2.     
  3. com.CommandText = "Select * from Users";  
  4.     
  5. com.CommandType = CommandType.Text;  
  6.     
  7. com.Connection = sqlCnt;  
  8.     
  9. SqlDataReader reader = com.ExecuteReader();  
  10.     
  11. while (reader.Read())  
  12.     
  13. {  
  14.     
  15.     // 打印出每个用户的用户名  
  16.     
  17.     Console.Write(reader["username"]);  
  18.     
  19. }  

6、 SqlCommandBuilder;

命名空间:System.Data.SqlClient.SqlCommandBuilder。

批量的更改数据,和SqlDataAdapter一起使用。主要用于客户端的开发,在客户端中一次编辑完数据,然后整体一次更新数据。

        
  1. SqlCommandBuilder MyCb = new SqlCommandBuilder(MyAdapter);  // 为MyAdapter赋予SqlCommandBuilder功能  
  2.     
  3. MyAdapter.Update(MyDataSet, "T_STUDENT");                   // 一次性更行MyDataSet中的数据  

对于DataSet的数据更新详见:1.3 Sql DataSet


▲返回顶部
Last modified by tommyhu on2013/02/26 21:04

Add a comment

Nickname

emotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemot