老师,你好,书上P190的例子,事务实际也只执行了一条SQL语句,实在不能完全理解事务的处理。能不能举个两条以上的例子,最好是GridView控件或者DataList控件内的数据,遍历每一行数据写入数据库的事务处理,谢谢!
读者朋友:
您好,可以看一下下面的示例代码:
/// <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数据表失败!", "信息提示");
}
小禾斗 发表于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数据表失败!", "信息提示");
}
谢谢老师,理解了