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 務必記得呀!




留言