DataAdapter做update更新时能够使用事务吗?
最好附源码 谢谢各位 问题点数:100、回复次数:8Top
1 楼fancyf(凡瑞)回复于 2005-06-19 23:55:32 得分 20
可以在指定DataAdapter.xxxCommand的时候指定事务:
dataAdapter.InsertCommand = new SqlCommand("text", conn, transaction);Top
2 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-20 06:30:57 得分 80
public void RunOdbcTransaction(string myConnString)
{
OdbcConnection myConnection = new OdbcConnection(myConnString);
myConnection.Open();
OdbcCommand myCommand = myConnection.CreateCommand();
OdbcTransaction myTrans;
// Start a local transaction
myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted);
// Assign transaction object for a pending local transaction
myCommand.Transaction = myTrans;
try
{
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
myCommand.ExecuteNonQuery();
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
myCommand.ExecuteNonQuery();
myTrans.Commit();
Console.WriteLine("Both records are written to database.");
}
catch(Exception e)
{
try
{
myTrans.Rollback();
}
catch (OdbcException ex)
{
if (myTrans.Connection != null)
{
Console.WriteLine("An exception of type " + ex.GetType() +
" was encountered while attempting to roll back the transaction.");
}
}
Console.WriteLine("An exception of type " + e.GetType() +
"was encountered while inserting the data.");
Console.WriteLine("Neither record was written to database.");
}
finally
{
myConnection.Close();
}
}
Top
3 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-20 06:31:31 得分 0
public void RunSqlTransaction(string myConnString)
{
SqlConnection myConnection = new SqlConnection(myConnString);
myConnection.Open();
SqlCommand myCommand = myConnection.CreateCommand();
SqlTransaction myTrans;
// Start a local transaction
myTrans = myConnection.BeginTransaction();
// Must assign both transaction object and connection
// to Command object for a pending local transaction
myCommand.Connection = myConnection;
myCommand.Transaction = myTrans;
try
{
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
myCommand.ExecuteNonQuery();
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
myCommand.ExecuteNonQuery();
myTrans.Commit();
Console.WriteLine("Both records are written to database.");
}
catch(Exception e)
{
try
{
myTrans.Rollback();
}
catch (SqlException ex)
{
if (myTrans.Connection != null)
{
Console.WriteLine("An exception of type " + ex.GetType() +
" was encountered while attempting to roll back the transaction.");
}
}
Console.WriteLine("An exception of type " + e.GetType() +
" was encountered while inserting the data.");
Console.WriteLine("Neither record was written to database.");
}
finally
{
myConnection.Close();
}
}
Top
4 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-20 07:24:15 得分 0
其实基本上都一样的...
System.Data.SqlClient.SqlConnection mCn
=new System.Data.SqlClient.SqlConnection("...");
System.Data.SqlClient.SqlDataAdapter mDa
=new System.Data.SqlClient.SqlDataAdapter("...",mCn);
System.Data.SqlClient.SqlTransaction mTr
=mCn.BeginTransaction();
try
{
/
/...............
mDa.UpdateCommand.Transaction= mTr; //这一句很关键。。
mDa.Update(...);
mTr.Commit();
}
catch
{
mTr.Rollback();
}
Top
5 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-20 07:26:15 得分 0
你也可以在存贮过程中直接这样写...
BEGIN TRANS
DECLARE @orderDetailsDrror int,@productError int
DELETE FROM "order Details" where ProdcutID=42
Select @orderDetailsError==@@ERROR
DELETE FROM Products where ProdutId=42
Select @ProductError=@@ERROR
if @orderDetailsError=0 AND @productError=0
COMMIT TRANS
ELSE
ROLLBACK TRANSTop
6 楼chx_xuxu(逍遥客)回复于 2005-06-20 08:01:28 得分 0
顶Top
7 楼macd004()回复于 2005-06-20 12:08:47 得分 0
太感谢boytomato(深爱一人叫颖的女孩!) 绝对够用啦Top
8 楼lovedogdog(天目湖鱼头)回复于 2005-09-05 11:58:04 得分 0
markTop




