• C#(99):SQLCommand命令、DbTransaction事务


    一、SqlDataReader

    SqlConnection conn = new SqlConnection("server=10.126.64.11;user=it_oper;pwd=IT@SME2018;database=MESOtheata;");
    conn.Open();
    SqlCommand cmd = new SqlCommand("select * from [A_Emp_Dept_20190522]", conn);//    或者
                                                                                 //或者    SqlCommand cmd=conn.CreateCommand();cmd.CommandText="";
    SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);//读取完毕自动关闭连接
    for (int i = 0; i < reader.FieldCount - 1; i++)
    {
        Console.WriteLine(reader.GetName(i));//获取字段名
        while (reader.Read())//或者使用reader.HasRows属性判断时候有记录
        {
            Console.WriteLine(reader.GetDateTime(0).ToString());
            //或者 Console.WriteLine(Convert.ToDateTime(reader[0]).ToString());
            object[] values = new object[reader.FieldCount - 1];
            reader.GetValues(values);//读取一行所有字段的内容到Values字段中
            if (reader.IsDBNull(0)
            {
                //判断某字段是否为null值。
            }
        }
    
    }
    reader.Close();
    //系统未关闭时,本Command更改CommandText后或新建Command还有继续使用此连接。
    //conn.Close();

    二、参数化查询

    1、使用SQLClient:

    SqlCommand cmd = new SqlCommand("select * from [A_Emp_Dept_20190522] where  empname=@empname", conn);
    SqlParameter para = new SqlParameter("@empname", SqlDbType.NVarChar, 10);
    para.Value = "曾亮";
    cmd.Parameters.Add(para);
    //或者直接 cmd.Parameters.AddWithValue("@empname","曾亮");

    2、使用OleDb:

    OleDbCommand cmd = new OleDbCommand("select * from [A_Emp_Dept_20190522] where  empname like ?  and line like ?", conn);
    cmd.Parameters.AddWithValue("@empname", "曾亮");
    cmd.Parameters.AddWithValue("@line", "ODMZ%");//参加的参数的顺序应与?号的顺序相同,参数名可随意执行,甚至可以是空串。

    三、执行无返回值的查询:cmd.ExecuteNonQuery()

    SqlCommand cmd = new SqlCommand("update  [A_Emp_Dept_20190522] set dept='aa' where  dept='' ", conn);
    int RecordAffected = cmd.ExecuteNonQuery();
    if (RecordAffected == 0)
    {
        Console.Write("操作失败");
    }

    四、执行返回单值的查询:cmd.ExecuteScalar()

    SqlCommand cmd = new SqlCommand("select count(*) from   [A_Emp_Dept_20190522] ", conn);
    if (Convert.ToInt32(cmd.ExecuteScalar()) == 0)//无记录,返回null
    {
        Console.Write("无记录");
    }

    五、使用Transaction事务

    SqlTransaction trans = null;
    try
    {
        trans = conn.BeginTransaction();//默认事务隔离级别为ISolationLevel.Serilizable,Oracle为ISolationLevel.ReadCommited
        SqlCommand cmd = new SqlCommand("Insert int **", conn);
        cmd.Transaction = trans;//为命令指定一个事务
        cmd.ExecuteNonQuery();
        //可以有多个SqlCommand一并执行,一起提交或回滚
        trans.Commit();
    }
    catch
    {
        trans.Rollback();
    }

    Transaction事务隔离级别:

    image

    六、调用存储过程

    image

    SqlCommand cmd = new SqlCommand("GetCustomer", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    
    SqlParameter para1 = new SqlParameter("@CustomerID", SqlDbType.NChar, 10);
    para1.Value = "UINET";
    cmd.Parameters.Add(para1);
    
    SqlParameter para2 = new SqlParameter("@CompanyName", SqlDbType.NVarChar, 30);
    para2.Direction = ParameterDirection.Output;
    cmd.Parameters.Add(para2);
    
    cmd.ExecuteNonQuery();
    Console.WriteLine(cmd.Parameters["@CompanyName"].Value);

    七、使用DataReader获取数据库模式信息

    SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SchemaOnly);//仅仅读取模式信息
    DataTable table = reader.GetSchemaTable();
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn col in table.Columns)
        {
            Console.WriteLine(col.ColumnName + row[col.ColumnName]);
        }
    }

    八、浏览多个结果集

    SqlCommand cmd = new SqlCommand("select * from Catogories;select * from Customers", conn);
    
    SqlDataReader reader = cmd.ExecuteReader();//仅仅读取模式信息
    DataTable table = reader.GetSchemaTable();
    do//首先自动定位在第一个结果集上
    {
        while (reader.Read())
        {
            Console.Write(reader[0]);
        }
    } while (reader.NextResult());

    九、DbDataReader类

    从数据源中读取行的只进流,包含SqlDataReader ,OleDbDataReader ,OdbcDataReader ,实现了IDataReader IDataRecord 接口

    • 属性
      IsClosed    获取一个值,该值指示数据读取器是否已关闭。
      FieldCount    获取当前行中的列数。
      Item[Int32]    获取位于指定索引处的列。
      Item[String]    获取具有指定名称的列。
    • 方法
      Close()    关闭 IDataReader 对象。
      GetSchemaTable()    返回一个 DataTable,它描述 IDataReader 的列元数据。
      NextResult()    在读取一批 SQL 语句的结果时,使数据读取器前进到下一个结果。
      Read()    让 IDataReader 前进到下一条记录。
      Get***(Int32)    获取指定列的值。
      GetValues(Object[])    使用当前记录的列值填充对象的数组。
      IsDBNull(Int32)    返回指定字段是否设置为 null。

    十、其他

    image

  • 相关阅读:
    angularJS之基础知识(一)
    angularJS之$http:与服务器交互
    angualrJS之表单验证
    python实现命令行中的进度条原理
    通过Arcpy在ArcMap工具箱中添加脚本计算面图层的起终点坐标
    关于ArcGIS API for JavaScript中basemap的总结介绍(一)
    初学JAVA--分支语句
    移动端开发通用适配
    js中Number.toFixed()方法的理解
    <div>标签仿<textarea>。contentEditable=‘true’,赋予非表单标签内容可以编辑
  • 原文地址:https://www.cnblogs.com/springsnow/p/9433913.html
Copyright © 2020-2023  润新知