C#中的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事务隔离级别:

阅读剩余部分

相关阅读 >>

基于sqlalchemy实现操作mysql并执行原生sql语句

sqlite教程(一):sqlite数据库介绍

创建索引的sql语句是什么

mysql中数据库优化的常见sql语句总结

sql查询至少连续n天登录的用户

字段值包含一批延续的字符串

sql 新增修改 表字段列的类型等

在mysql数据库中使用c执行sql语句的方法

sqlserver为标识列指定显式值

sql实现leetcode(184.系里最高薪水)

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...