• SqlClient类库下的常用操作(一)


      EntityFrameWork4.1已经面世多日了,其好处在EF讨论模块已经很多了,但本人还是认为SQL文还是不能忘,

    C#操作sql server的类库用法也不能忘,通过运用SqlClient类库下的类访问数据库更能理解访问原理。

    --摘自MSDN Start--

      SqlConnection类:表示sql server数据源的一个连接。或者表示sql server数据源的一个唯一的会话。

      SqlCommand类:表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程。

      SqlDataAdapter类: 表示用于填充DataSet和更新 SQL Server 数据库的一组数据命令和一个数据库连接。

      SqlCommandBuilder类:自动生成单表命令,用于将对DataSet所做的更改与关联的 SQL Server 数据库的更改相协调。

      SqlParamater类:表示SqlCommand的参数,也可以是它到DataSet列的映射。

      SqlTransaction类:表示要在 SQL Server 数据库中处理的 Transact-SQL 事务。

    --摘自MSDN End--

    从例子看以上各个类之间的协作。

    1.查询

    假定connectionString已经定义好。

    View Code
    1 using (SqlConnection conn =new SqlConnection(connectionString))
    2 {
    3 //连接打开
    4   conn.Open();
    5 //创建命令
    6   SqlCommand command =new SqlCommand("Select * from Orders", conn);
    7 //执行命令返回SqlDataReader类型结果
    8   SqlDataReader reader = command.ExecuteReader();
    9 try
    10 {
    11 while (reader.Read())
    12 {
    13 Console.Write(string.Format("{0},{1}", reader[0], reader[1]));
    14 }
    15 }
    16 finally
    17 {
    18 //最后总是关闭reader对象
    19   reader.Close();
    20 if (conn.State != ConnectionState.Closed) conn.Close();
    21 }
    22 }

    2.单笔更新

    2.1:使用SqlCommandBuilder类来实现

    View Code
    1 publicvoid rpt_Pro_List_Bind(string ordresId,string ordersName)
    2 {
    3 using (SqlConnection conn =new SqlConnection(connectionString))
    4 {
    5 //连接打开
    6   conn.Open();
    7
    8 //使用SelectCommand和SqlConnection初始化SqlDataAdapter对象
    9 //若没有使用SelectCommand和SqlConnection初始化SqlDataAdapter对象
    10 //就必须设置adapter.SelectCommand = new SqlCommand(QueryString, conn)
    11 //SelectCommand 必须至少返回一个主键列或唯一的列。
    12 //如果什么都没有返回,就会产生 InvalidOperation 异常,不生成命令。
    13 SqlDataAdapter adapter =new SqlDataAdapter("select * from Orders where OrdersId"+ordresId, conn);
    14 DataTable dt =new DataTable();
    15
    16 //将数据源填充到DataTable对象
    17 adapter.Fill(dt);
    18
    19 //重新赋值
    20 dt.Rows[0]["OrdersName"] = ordersName;
    21
    22 //生成用于表单更新的SQL命令,也可以这么写:
    23 //SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter);
    24 //commandBuilder.GetUpdateCommand();
    25 new SqlCommandBuilder(adapter);
    26
    27 //执行更新
    28 adapter.Update(dt);
    29 }
    30 }

     2.2 不使用SqlCommandBuilder类实现

    View Code
    1 publicvoid rpt_Pro_List_Bind(string ordresId,string ordersName)
    2 {
    3 string commandText ="update Orders set OrdersName = @OrdersName where OrdersId = @OrdersId";
    4 using (SqlConnection conn =new SqlConnection(connectionString))
    5 {
    6 //创建命令
    7 SqlCommand command =new SqlCommand(commandText, conn);
    8 //传入参数
    9 command.Parameters.Add(new SqlParameter("@OrdersName",ordersName));
    10 command.Parameters.Add(new SqlParameter("@OrdersId", ordresId));
    11 try
    12 {
    13 //连接打开
    14 conn.Open();
    15 //执行命令
    16 int iCount = command.ExecuteNonQuery();
    17 }
    18 catch (Exception ex)
    19 {
    20 Console.WriteLine(ex.Message);
    21 }
    22 finally
    23 {
    24 if (conn.State != ConnectionState.Closed) conn.Close();
    25 }
    26 }
    27 }

    2.3 使用存储过程更新

    此处省略存储过程内容,存储过程为sp_UpdateOrderByOrdersId 参数为@OrdersId varchar(10),@OrdersName varchar(20)

    View Code
    1 publicvoid rpt_Pro_List_Bind(string ordresId,string ordersName)
    2 {
    3 using (SqlConnection conn =new SqlConnection(connectionString))
    4 {
    5 //创建命令
    6 SqlCommand command =new SqlCommand("sp_UpdateOrderByOrdersId",conn);
    7 command.CommandType = CommandType.StoredProcedure;
    8
    9 //给参数赋值
    10 command.Parameters.Add(new SqlParameter("@OrdersId",SqlDbType.VarChar,10));
    11 command.Parameters.Add(new SqlParameter("@OrdersName", SqlDbType.VarChar,20));
    12 command.Parameters[0].Value = ordresId;
    13 command.Parameters[1].Value = ordersName;
    14 try
    15 {
    16 //连接打开
    17 conn.Open();
    18 //执行命令
    19 int iCount = command.ExecuteNonQuery();
    20 }
    21 catch (Exception ex)
    22 {
    23 Console.WriteLine(ex.Message);
    24 }
    25 finally
    26 {
    27 if (conn.State != ConnectionState.Closed) conn.Close();
    28 }
    29 }
    30 }

    3.同时插入多笔数据(事务控制)

    View Code
    1 publicvoid rpt_Pro_List_Bind(string ordresId,string ordersName)
    2 {
    3 using (SqlConnection conn =new SqlConnection(connectionString))
    4 {
    5 //连接打开
    6 conn.Open();
    7 //创建命令
    8 SqlCommand command =new SqlCommand();
    9
    10 SqlTransaction transaction =null;
    11 //开始事务
    12 //此时隔离级别为默认级别,建议使用带iso参数设定隔离级别
    13 transaction = conn.BeginTransaction();
    14
    15 //事务与连接、命令相关联
    16 command.Connection = conn;
    17 command.Transaction = transaction;
    18
    19 try
    20 {
    21 command.CommandText ="insert into Ordres (OrdersId,OrdersName) values ('0001','aaa')";
    22 command.ExecuteNonQuery();
    23 command.CommandText ="insert into Ordres (OrdersId,OrdersName) values ('0002','bbb')";
    24 command.ExecuteNonQuery();
    25 //提交事务
    26 transaction.Commit();
    27 }
    28 catch(Exception ex)
    29 {
    30 Console.WriteLine("Message:{0}", ex.Message);
    31 try
    32 {
    33 //执行回滚
    34 transaction.Rollback();
    35 }
    36 catch(Exception ex)
    37 {
    38 Console.WriteLine("Message:{0}", ex.Message);
    39 }
    40 }
    41 }
    42 }
  • 相关阅读:
    一个在线的C++帮助文档网站
    linux 学习笔记 (四)
    类的static成员函数和const成员函数
    Linux的inode、软链接、硬链接
    常用linux命令(三)
    多语言调用之 C++ 调用 Java JNI
    多语言调用之 Java调用C/C++
    NHibernate 操作原生SQL以及查询DataTable,DataSet
    DataGridView控件用法合集
    Java AOP实战 寻找SQL的引用路径
  • 原文地址:https://www.cnblogs.com/willpan/p/SQLClient.html
Copyright © 2020-2023  润新知