HOME > .NET Framework > Forum > This SqlTransaction has completed; it is no longer usable. โค้ดนี้ใช้งานได้ครับ แต่จะError ในกรณีที่มีการเรียกใช้ Method ซ้ำด้วยObject
This SqlTransaction has completed; it is no longer usable. โค้ดนี้ใช้งานได้ครับ แต่จะError ในกรณีที่มีการเรียกใช้ Method ซ้ำด้วยObject
public class DBClass
{
private string STR_CONNECTION = "Server=HOADNA-PC\\SQLEXPRESS;Uid=sa;PASSWORD=123;database=aa;Max Pool Size=400;Connect Timeout=600;";
private SqlConnection DBConnection;
private SqlCommand DBCommand;
private SqlDataAdapter DBAdapter;
private SqlTransaction Trans = default(SqlTransaction);
public DBClass()
{
DBConnection = new SqlConnection(STR_CONNECTION);
DBConnection.Open();
Trans = DBConnection.BeginTransaction(IsolationLevel.ReadCommitted);
DBCommand = new SqlCommand();
DBCommand.Connection = DBConnection;
DBCommand.Transaction = Trans;
DBAdapter = new SqlDataAdapter();
}
public DataSet Query(string strSQL)
{
DataSet DS = new DataSet();
try
{
DBCommand.CommandText = strSQL;
DBAdapter.SelectCommand = DBCommand;
DBAdapter.Fill(DS);
Trans.Commit(); //*************************** จุด Error *************************
}
catch (Exception Ex)
{
Trans.Rollback();
}
finally
{
DBConnection.Close();
}
return DS;
}
}
โค้ดนี้ใช้งานได้ครับ แต่จะError ในกรณีที่มีการเรียกใช้ Method ซ้ำด้วยObject ตัวเดิม
มันจะฟ้องว่า This SqlTransaction has completed; it is no longer usable.
ขั้นตอนใน finally ผมควรเขียนอะไรเพิ่มครับ เพื่อที่จะSet ค่า Trans ให้มันใช้งานได้ใหม่
public class DBClass
{
private string STR_CONNECTION = "Server=HOADNa-PC\\SQLEXPRESS;Uid=sa;PASSWORD=123;database=a;Max Pool Size=400;Connect Timeout=600;";
private SqlConnection DBConnection;
private SqlCommand DBCommand;
private SqlDataAdapter DBAdapter;
private SqlTransaction Trans = default(SqlTransaction);
public DBClass()
{
}
public void DBOpen()
{
DBConnection = new SqlConnection(STR_CONNECTION);
DBConnection.Open();
Trans = DBConnection.BeginTransaction(IsolationLevel.ReadCommitted);
DBCommand = new SqlCommand();
DBCommand.Connection = DBConnection;
DBCommand.Transaction = Trans;