在數據庫中使用存儲過程,通常遇到多個操作的時候,我們都會用事物來進行錯誤回滾。但是,有時候,需要保存大數據量的時候,將數據傳到存儲過程裏面,是很麻煩的時候,varchar 8000,nvarchar 4000,當大於這個最大值的時候,怎麼處理呢?多聲明幾個參數。?這個,你能預知多少個呢?
所以,在這個情況下,我覺得在代碼裏面使用事物比較好。
下面我們看一下,怎麼樣在代碼中實現事物操作數據:
1.首先要啓動
MSDTC 服務(Distributed Transaction Coordinator) 協調跨多個數據庫、消息隊列、文件系統等資源管理器的事務。如果停止此服務,這些事務將會失敗。如果禁用此服務,顯式依賴此服務的其他服務將無法啓動。
確保MSDTC服務啓動運行。
讓後在項目中引用
System.Transactions
代碼中:
using System.Transactions;
下面看一下具體代碼
using (TransactionScope scope = new TransactionScope())
{
DbCommand cmd = new DbCommand(....)
...........//這裏是您的代碼。
ret = ExecuteNonQuery(dbUnic, cmd);
if (0 < ret)
{
scope.Complete();
}
else
{
scope.Dispose();
}
}
using (TransactionScope scope = new TransactionScope())
{
DbCommand cmd =
dbUnic.GetSqlStringCommand(........));
dbUnic.AddInParameter(cmd, NAME_PARAM_CONSULTATION_SYSID, DbType.String, sysID);
dbUnic.AddInParameter(cmd, NAME_PARAM_CONSULTATION_OBJID, DbType.String, objID);
............
bool hasError = true;
if (0 < ExecuteNonQuery(dbUnic, cmd))
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(DBConnectionString))
{
bulkCopy.DestinationTableName =
DataAccessConsultationSlice.NAME_TBL_CONSULTATION_SLICE;
try
{
// Write from the source to the destination.
bulkCopy.WriteToServer(這個是datatable數據);
hasError = false;
}
catch (Exception ex)
{
hasError = true;
}
}
if (!hasError)
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(DBConnectionString))
{
bulkCopy.DestinationTableName =
DataAccessConsultationExpert.NAME_TBL_CONSULTATION_EXPERT;
try
{
// Write from the source to the destination.
bulkCopy.WriteToServer(這個是datatable數據);
hasError = false;
}
catch (Exception ex)
{
hasError = true;
}
}
if (!hasError)
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(DBConnectionString))
{
bulkCopy.DestinationTableName =
DataAccessConsultationAnnex.NAME_TBL_CONSULTATION_ANNEX;
try
{
// Write from the source to the destination.
bulkCopy.WriteToServer(這個是datatable數據);
hasError = false;
}
catch (Exception ex)
{
hasError = true;
}
}
}
}
}
ret = hasError ? 0 : 1;
if (0 < ret)
{
scope.Complete();
}
else
{
scope.Dispose();
}
}
這樣,就不用擔心數據太大的問題了,只要把數據拼裝好了,就可以在代碼中直接進行數據操作的事物了。