实现& # 39;读者# 39;去接球块
本文关键字:实现 读者 | 更新日期: 2023-09-27 18:13:20
try
{
sqlTran = conn.BeginTransaction();
String tblAuto = "Select * from tblAuto_Num where Company_Code='Comp'AND Module='WSS' AND Sub_Module='SVS' AND Doc_Type='ORD'; ";
SqlCommand cmd = new SqlCommand(tblAuto, conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
}
reader.Close();
Label1.Text = "ttt";
sqlTran.Commit();
conn.Close();
}
catch (Exception ex)
{
if (sqlTran != null) sqlTran.Rollback();
Label1.Text = ex.toString();
}
当我实现SqlDataReader reader = cmd.ExecuteReader();
时,它就会进入catch
块。有人能解释一下原因吗?
这是错误信息:
System.InvalidOperationException: ExecuteReader requires the command to have a transaction when the connection assigned to the command is in a pending local transaction. The Transaction property of the command has not been initialized.
at System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader() at TicketApp.Default.ButtonAppointment_Click(Object sender, EventArgs e)
in c:'Users'Farhad'Documents'Visual Studio 2013'Projects'TicketApp'TicketApp'Default.aspx.cs:line 29
使用使用的试试. .catch当使用IDisposable
时:
using (var sqlTran = conn.BeginTransaction()) {
// Format out SQL to be more readable
String tblAuto =
@"select *
from tblAuto_Num
where Company_Code = 'Comp' and
Module = 'WSS' and
Sub_Module = 'SVS' and
Doc_Type='ORD'; ";
try {
using (SqlCommand cmd = new SqlCommand(tblAuto, conn)) {
cmd.Transaction = sqlTran; // <- Do not forget this
using (SqlDataReader reader = cmd.ExecuteReader()) {
while (reader.Read()) {
...
}
}
}
sqlTran.Commit();
}
catch (Exception) {
try {
sqlTran.Rollback();
Label1.Text = "bbb";
throw; // <- When catch Exception (base class) do not forget to throw
}
catch (Exception) {
// when rollback can't be performed
throw;
}
}
}