Command 的 Transaction 属性尚未初始化。

renshibubushiren 2009-03-30 11:24:08
C#连接Oracle时经常出现这个错误:
如果分配给 Command 的 Connection 对象位于挂起的本地事务中,Execute 将需要 Command 对象具有 Transaction 对象。Command 的 Transaction 属性尚未初始化。
请问高手是怎么回事!!!
...全文
1351 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
z273894270 2010-11-15
  • 打赏
  • 举报
回复
用了事物可以参考2楼的代码
renshibubushiren 2009-03-31
  • 打赏
  • 举报
回复
using (OracleConnection connection = new OracleConnection(GetConnectionString()))
{
DataSet dataSet = new DataSet();
connection.Open();
OracleDataAdapter sqlDA = new OracleDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
OracleTransaction trans = connection.BeginTransaction(IsolationLevel.ReadCommitted);
if (trans != null)
{
sqlDA.SelectCommand.Transaction = trans;
sqlDA.Fill(dataSet, tableName);
trans.Commit();
}
connection.Close();
trans.Dispose();
return dataSet;
}


我的代码是这样的,不知道怎么改,请高手帮忙
kingtiy 2009-03-30
  • 打赏
  • 举报
回复
你的command没有关联事务
二楼已经有示例了
command.Transaction = transaction;
周公 2009-03-30
  • 打赏
  • 举报
回复
使用了事务了吗?如果使用了事务的话,2楼的代码可以参考。
jlj84237485 2009-03-30
  • 打赏
  • 举报
回复
帮顶一下
hongqi162 2009-03-30
  • 打赏
  • 举报
回复

MSDN里面的一个例子

OracleConnection connection = new OracleConnection("server=MyServer; integrated security=yes;");
connection.Open();
OracleTransaction transaction = connection.BeginTransaction();
OracleCommand command = connection.CreateCommand();
command.Transaction = transaction;
command.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
command.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
OracleLob tempLob = (OracleLob)command.Parameters[0].Value;
byte[] tempbuff = new byte[10000];
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(tempbuff,0,tempbuff.Length);
tempLob.EndBatch();
command.Parameters.Clear();
command.CommandText = "MyTable.MyProc";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new OracleParameter("ImportDoc", OracleType.Blob)).Value = tempLob;
command.ExecuteNonQuery();
transaction.Commit();
connection.Close
superhsj 2009-03-30
  • 打赏
  • 举报
回复
这个估计到c#版面取问效果更好

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧