已有16人关注
P190,实现事务处理的问题
发表在ASP.NET答疑区 2017-07-13
是否精华
版块置顶:

老师,你好,书上P190的例子,事务实际也只执行了一条SQL语句,实在不能完全理解事务的处理。能不能举个两条以上的例子,最好是GridView控件或者DataList控件内的数据,遍历每一行数据写入数据库的事务处理,谢谢!

分享到:
精彩评论 2
小禾斗
学分:7348 LV13
TA的每日心情
奋斗
2017-04-21 14:00:25
2017-07-14
沙发

读者朋友:

  您好,可以看一下下面的示例代码:

/// <param name="strSqls">使用List泛型封装多条SQL语句</param>

/// <param name="sqlConn">数据库连接</param>

public bool ExecDataBySqls(List<string> strSqls, SqlConnection sqlConn)

{

    bool booIsSucceed = false;  //声明提交数据是否成功的标记

    SqlCommand sqlCmd = new SqlCommand();  //创建SqlCommand对象

    sqlCmd.Connection = sqlConn;    

    if (sqlConn.State == ConnectionState.Closed)

    {

        sqlConn.Open();   //打开数据库连接

    }

    SqlTransaction sqlTran = sqlConn.BeginTransaction(); //开始一个事务

    try

    {

        sqlCmd.Transaction = sqlTran;  

        foreach (string item in strSqls)

        {

            sqlCmd.CommandType = CommandType.Text; 

            sqlCmd.CommandText = item;  

            sqlCmd.ExecuteNonQuery(); 

        }

        sqlTran.Commit(); //提交事务,持久化数据

        booIsSucceed = true;  //表示提交数据库成功

    }

    catch

    {

        sqlTran.Rollback();   //回滚事务,恢复数据

        booIsSucceed = false;  //表示提交数据库失败

    }

    finally

    {

        sqlConn.Close(); //关闭连接

        strSqls.Clear(); //清除列表strSqls中的元素

    }

    return booIsSucceed;      //方法返回值

}

下面是调用的代码:

//创建数据库连接对象

    SqlConnection sqlConn = new SqlConnection("Data Source=MRWXK\\WANGXIAOKE;Database=db_TomeTwo;uid=sa;pwd =;");

    List<String> strSqls = new List<string>();  

   String strDelete1 = "delete From tb_Author Where AuthorId = '99'";

    strSqls.Add(strDelete1); 

 String strDelete2 = "delete From tb_AuthorsBook Where AuthorId = '99'"; 

    strSqls.Add(strDelete2);

    string strInsert1 = "insert into tb_Author values('99','zhd')";

    strSqls.Add(strInsert1);//SQL语句添加到集合中

    string strInsert2 = "insert into tb_AuthorsBook values('66','C#范例大全','99')"; 

    strSqls.Add(strInsert2); 

    if (ExecDataBySqls(strSqls, sqlConn)) 

    {

        MessageBox.Show("提交tb_Author数据表成功!", "信息提示");

        MessageBox.Show("提交tb_AuthorsBook数据表成功!","信息提示");

    }

    else

    {

        MessageBox.Show("提交tb_Author数据表失败!", "信息提示");

        MessageBox.Show("提交tb_AuthorsBook数据表失败!", "信息提示");

    }


winzond
学分:52 LV3
2017-07-14
板凳

小禾斗 发表于2017-07-14 09:24

读者朋友:

  您好,可以看一下下面的示例代码:

/// <param name="strSqls">使用List泛型封装多条SQL语句</param>

/// <param name="sqlConn">数据库连接</param>

public bool ExecDataBySqls(List<string> strSqls, SqlConnection sqlConn)

{

    bool booIsSucceed = false;  //声明提交数据是否成功的标记

    SqlCommand sqlCmd = new SqlCommand();  //创建SqlCommand对象

    sqlCmd.Connection = sqlConn;    

    if (sqlConn.State == ConnectionState.Closed)

    {

        sqlConn.Open();   //打开数据库连接

    }

    SqlTransaction sqlTran = sqlConn.BeginTransaction(); //开始一个事务

    try

    {

        sqlCmd.Transaction = sqlTran;  

        foreach (string item in strSqls)

        {

            sqlCmd.CommandType = CommandType.Text; 

            sqlCmd.CommandText = item;  

            sqlCmd.ExecuteNonQuery(); 

        }

        sqlTran.Commit(); //提交事务,持久化数据

        booIsSucceed = true;  //表示提交数据库成功

    }

    catch

    {

        sqlTran.Rollback();   //回滚事务,恢复数据

        booIsSucceed = false;  //表示提交数据库失败

    }

    finally

    {

        sqlConn.Close(); //关闭连接

        strSqls.Clear(); //清除列表strSqls中的元素

    }

    return booIsSucceed;      //方法返回值

}

下面是调用的代码:

//创建数据库连接对象

    SqlConnection sqlConn = new SqlConnection("Data Source=MRWXK\\WANGXIAOKE;Database=db_TomeTwo;uid=sa;pwd =;");

    List<String> strSqls = new List<string>();  

   String strDelete1 = "delete From tb_Author Where AuthorId = '99'";

    strSqls.Add(strDelete1); 

 String strDelete2 = "delete From tb_AuthorsBook Where AuthorId = '99'"; 

    strSqls.Add(strDelete2);

    string strInsert1 = "insert into tb_Author values('99','zhd')";

    strSqls.Add(strInsert1);//SQL语句添加到集合中

    string strInsert2 = "insert into tb_AuthorsBook values('66','C#范例大全','99')"; 

    strSqls.Add(strInsert2); 

    if (ExecDataBySqls(strSqls, sqlConn)) 

    {

        MessageBox.Show("提交tb_Author数据表成功!", "信息提示");

        MessageBox.Show("提交tb_AuthorsBook数据表成功!","信息提示");

    }

    else

    {

        MessageBox.Show("提交tb_Author数据表失败!", "信息提示");

        MessageBox.Show("提交tb_AuthorsBook数据表失败!", "信息提示");

    }


谢谢老师,理解了

首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照