C# - MSSQL - Transaction 資料庫執行完沒有存入東西 / 命令的Transaction 屬性尚未初始化 /資料庫新增沒反應
C# - MSSQL - Transaction 資料庫執行完沒有存入東西 / 命令的Transaction 屬性尚未初始化 /資料庫新增沒反應
身為一個走應用端的軟體工程師,資料庫只會基本功夫
串串IBM的AS400或是微軟的MSSQL都還算上手
但這次踩到了地雷,主要是修改承接了舊的程式碼
本來就已經有寫入的方法
就直接使用了
public void UpdateAs400Data(string strConnectionString, string strSql){
System.Data.SqlClient.SqlConnection sqlConnection1 = new System.Data.SqlClient.SqlConnection();
sqlConnection1.ConnectionString =strConnectionString;
if (sqlConnection1.State.ToString()!= "Open")
{
sqlConnection1.ConnectionString = strConnectionString;
sqlConnection1.Open();
}
System.Data.SqlClient.SqlTransaction tn = sqlConnection1.BeginTransaction();
System.Data.SqlClient.SqlCommand sqlCommand1 = new System.Data.SqlClient.SqlCommand();
System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter();
sqlCommand1.Connection =sqlConnection1;
sqlCommand1.Transaction = tn;
sqlCommand1.CommandText = strSql;
try
{
int affectedCount = sqlCommand1.ExecuteNonQuery();
}
catch(Exception ex)
{
throw ex;
}
}
一路執行都沒甚麼問題
觀察ExecuteNonQuery也確實有回應新增的行數
程式沒有報任何錯誤或訊息
但資料庫就是一直空空如也
後來請教資深同事
原來是Transaction搞的鬼
原本的程式將關閉Transaction的功能註解了
簡單說明一下Transaction的功能
Transaction:將這次所有的內容打包,如果其中某一次SQL指令出現問題,那這次所有的SQL接不執行。
若寫了System.Data.SqlClient.SqlTransaction tn = sqlConnection1.BeginTransaction();
就一定要初始化Transaction
像這樣sqlCommand1.Transaction = tn;
否則會出現命令的Transaction 屬性尚未初始化的錯誤
而我的程式執行後一直無法在資料庫中看到東西
是因為最後少了tn.Commit();
tn.Commit();
少了這個Transaction 沒有完整的執行,於是一行SQL都沒有執行了
若要使用Transaction 務必記得呀!
留言
張貼留言