关于事务处理的小问题! 每个SqldataReader必须有一个自己的连接所以SqldataReade不能共用transaction 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我很菜,请问SqldataReader怎么建立自己的连接呢? 我不明白“每个SqldataReader必须有一个自己的连接”这句话是什么意思啊~~~~我是菜鸟,请多关照! 除非这个SqlDataReader关闭后,才能继续使用Command利用这个连接来执行查询之类的。所以,必须等第一个SqlDataReader关闭后,才能执行第二个查询。你考虑用SqlDataAdapter和DataSet来实现吧 如果用SqlDataAdapter和DataSet来实现的话,是不是不用考虑Dataset关闭或清空等问题了啊? Dim myTrans As SqlTransaction = robjSqlconnect.BeginTransaction()robjSqlcommand = robjSqlconnect.CreateCommandrobjSqlcommand.Transaction = myTransrobjSqlcommand.CommandText = strSqlmoviesUpdaterobjSqldataReader = robjSqlcommand.ExecuteReader '用到了SqldataReaderrobjSqldataReader .Close();robjSqlcommand.CommandText = strSqlMovurlsUpdaterobjSqldataReader = robjSqlcommand.ExecuteReader '用到了SqldataReader 如果只是两个查询语句,用不着事务的;你用事务和不用事务都一样。对数据库表插入、删除、修改才用到数据库事务。你上面的代码该成try{ // 进行多次查询 ...... return objRet; //objRet是要的结果集}catch{ return null} uffeng(阿呆) 大哥的方法我试过了,不行啊 每个SqldataReader必须有一个自己的连接然后一次提交整个事务 SqldataReader因为是与数据库保持连接的,所以一个SqldataReader就要占用一个数据库连接对象SqlConnection,而.NET里的事务是与sqlconnection对象来关联的。你可以用DataSet来处理,在DataSet里放进两张表就可以理解问题了。 vzxq(灵感人) 大哥您有其他办法吗?请多指教!~~~ try { this.Cursor = Cursors.WaitCursor; if(m_conn.State !=ConnectionState.Open) m_conn.Open(); using(SqlTransaction trans = m_conn.BeginTransaction()) { try { m_daBds.SelectCommand.Transaction = trans; m_cbBds.RefreshSchema(); DataSet dsChange = DsXsdy.GetChanges(); if(dsChange ==null) { trans.Rollback(); this.Cursor = Cursors.Default; return; } //执行数据库操作:insert or dle or update trans.Commit(); this.Cursor = Cursors.Default; m_conn.Close(); } catch (Exception ex) { trans.Rollback(); throw ex; } } } catch (Exception ex) { this.Cursor = Cursors.Default; throw ex; } SqlConnection myconn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnString"]);myconn.Open();SqlTransaction MyTran=myconn.BeginTransaction();SqlCommand mycommand;mycommand=myconn.CreateCommand();mycommand.Connection=myconn;mycommand.Transaction=MyTran;try{mycommand.CommandText="";robjSqldataReader = mycommand.ExecuteReader()) '用到了SqldataReader...//close robjSqlDataReaderrobjSqlDataReadermycommand.CommandText="";robjSqldataReader = mycommand.ExecuteReader()) '用到了SqldataReader//close robjSqlDataReaderrobjSqlDataReaderMyTran.Commit();//提交事务}Catch{MyTran.RollBack();}Finally{myconn.close();} 求解决办法 为什么在不同的服务器上发布会有问题? IIS 怎样通过 路由器 让广域网访问啊 一小段js代码想实现:11|22|33|44 确变成了:1122|2233|3344|44 30大分求TreeView的XML文件代码!忘了怎么写了。。。 关于sqlCacheDependency的问题,希望引起对这一个2.0新东西的讨论 如何在web中实现简单的进度条? 一个简单的问题,送分 关于XML绑定数据 asp.net这样的函数怎么调用? 请问下载了一个.net的论坛程序,该如果调试使它运行? Web.config
robjSqlcommand = robjSqlconnect.CreateCommand
robjSqlcommand.Transaction = myTransrobjSqlcommand.CommandText = strSqlmoviesUpdate
robjSqldataReader = robjSqlcommand.ExecuteReader '用到了SqldataReader
robjSqldataReader .Close();robjSqlcommand.CommandText = strSqlMovurlsUpdate
robjSqldataReader = robjSqlcommand.ExecuteReader '用到了SqldataReader
你用事务和不用事务都一样。
对数据库表插入、删除、修改才用到数据库事务。
你上面的代码该成
try
{
// 进行多次查询
......
return objRet; //objRet是要的结果集
}
catch
{
return null
}
然后一次提交整个事务
你可以用DataSet来处理,在DataSet里放进两张表就可以理解问题了。
{
this.Cursor = Cursors.WaitCursor;
if(m_conn.State !=ConnectionState.Open)
m_conn.Open();
using(SqlTransaction trans = m_conn.BeginTransaction())
{
try
{
m_daBds.SelectCommand.Transaction = trans;
m_cbBds.RefreshSchema(); DataSet dsChange = DsXsdy.GetChanges();
if(dsChange ==null)
{
trans.Rollback();
this.Cursor = Cursors.Default;
return;
}
//执行数据库操作:insert or dle or update
trans.Commit();
this.Cursor = Cursors.Default;
m_conn.Close();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
}
catch (Exception ex)
{
this.Cursor = Cursors.Default;
throw ex;
}
myconn.Open();
SqlTransaction MyTran=myconn.BeginTransaction();
SqlCommand mycommand;
mycommand=myconn.CreateCommand();
mycommand.Connection=myconn;
mycommand.Transaction=MyTran;try
{
mycommand.CommandText="";
robjSqldataReader = mycommand.ExecuteReader()) '用到了SqldataReader
...
//close robjSqlDataReader
robjSqlDataReadermycommand.CommandText="";
robjSqldataReader = mycommand.ExecuteReader()) '用到了SqldataReader
//close robjSqlDataReader
robjSqlDataReader
MyTran.Commit();//提交事务
}
Catch
{
MyTran.RollBack();
}
Finally
{
myconn.close();
}