![](/img/trans.png)
[英]InvalidOperationException: Connection property has not been initialized in update command?
[英]The Transaction property of the command has not been initialized
我正在尝试使用事务运行 ExecuteNonQuery,但我不断收到此错误
OleDbException :当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery 要求命令具有事务。 命令的 Transaction 属性尚未初始化。
这是我的代码:有什么问题?
_dataManager = new DataManager();
bool bTrance = false;
_dataManager.BuildConnectionString("server", "MyId", "MyPwd");
_dataManager.Connect();
try
{
Console.WriteLine("Begin Trans");
var res = _dataManager.BeginTransaction();
if (res)
{
bTrance = true;
Console.WriteLine(" Trans Success");
}
Console.WriteLine("Query Executed");
return _dataManager.ExecuteQuery("call SP_MySp");
}
catch (OleDbException objDBExc)
{
Console.WriteLine("OleDbException : " + objDBExc.Message);
if (bTrance)
{
_dataManager.RollbackTransaction();
}
return false;
}
catch (Exception objExc)
{
Console.WriteLine("OleDbException : " + objExc.Message);
if (bTrance)
{
bTrance = false;
_dataManager.RollbackTransaction();
}
return false;
}
finally
{
Console.WriteLine("Done!");
if (bTrance)
{
_dataManager.CommitTransaction();
}
}
public class DataManager
{
private OleDbConnectionStringBuilder dbConnStr;
private OleDbConnection dbConn;
private OleDbTransaction dbTransaction;
private OleDbCommand dbCommand;
private bool beginTransaction;
public bool BeginTransaction()
{
try
{
if (beginTransaction == false)
{
dbTransaction = dbConn.BeginTransaction();
dbCommand.Transaction = dbTransaction;
beginTransaction = true;
}
else
dbCommand.Transaction = dbTransaction;
}
catch (Exception)
{
throw;
}
return beginTransaction;
}
public bool ExecuteQuery(string command)
{
try
{
dbCommand.ExecuteNonQuery();
}
catch (OleDbException objDbEx)
{
throw;
}
catch (Exception objEx)
{
throw;
}
dbCommand.Parameters.Clear();
dbCommand.Connection = null;
return true;
}
}
调用SqlConnection 对象的BeginTransaction 方法来标记事务的开始。 BeginTransaction 方法返回对事务的引用。 此引用分配给事务中登记的 SqlCommand 对象。
将 Transaction 对象分配给要执行的 SqlCommand 的 Transaction 属性。 如果在与活动事务的连接上执行命令,并且尚未将 Transaction 对象分配给 Command 对象的 Transaction 属性,则会引发异常。
执行所需的命令。
调用SqlTransaction对象的Commit方法完成事务,或者调用Rollback方法中止事务。 如果在执行 Commit 或 Rollback 方法之前关闭或释放连接,则回滚事务。
参考https://msdn.microsoft.com/en-us/library/2k2hy99x(VS.80).aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.