打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQLCommand命令、DbTransaction事务

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事务隔离级别:

回到顶部

六、调用存储过程

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。

回到顶部

十、其他

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
.net中的4种事务总结
SqlParameter的用法
sql存储过程简单教程
C#调用存储过程带输出参数或返回值
C#数据库编程
SQLServer 在Visual Studio的2种连接方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服