[英]Window service C# - Refresh issue
我正在安排一個 windows 服務從路徑中選擇一個文件以加載到該 SQL 服務器中。 我正在使用數據表寫入 SQL 服務器。 雖然從路徑中選擇第一個文件來加載很好,但在第二次或幾次后遇到異常時
當我調試我沒有遇到這種異常時,由創建的列在數據表中添加一次。 這是我的緩存問題還是錯誤?
請注意,當我重新啟動服務時,在發生相同的異常后,它工作正常,沒有異常
日志中的異常:
名為“SGC#1_Created_By”的列已屬於此數據表。 指數數組的邊界之外。
try
{
var columnDetails = GetTemplateColumn(UserId, lbtempid[tbl], DBConnection);
SqlConnection bulkcon = new SqlConnection(DBEncryption);
bulkcon.Open();
using (SqlTransaction transaction = bulkcon.BeginTransaction())
{
using (SqlBulkCopy sqlbc = new SqlBulkCopy(bulkcon, SqlBulkCopyOptions.KeepIdentity, transaction))
{
DataTable _table = new DataTable();
_table = DsLocalBorrowingTbl.Tables[tbl];
for (int _tbl = 0; _tbl < columnDetails.Count; _tbl++)
{
sqlbc.ColumnMappings.Add(columnDetails[_tbl].APL_MAS_CRA_Column_Name.Trim(), columnDetails[_tbl].APL_MAS_CRA_Column_Name.Trim());
}
sqlbc.ColumnMappings.Add("SGC#1_Created_By", "SGC#1_Created_By");
sqlbc.ColumnMappings.Add("SGC#2_Created_On", "SGC#2_Created_On");
sqlbc.ColumnMappings.Add("SGC#3_IsProcessed", "SGC#3_IsProcessed");
sqlbc.ColumnMappings.Add("SGC#4_Processed_On", "SGC#4_Processed_On");
System.Data.DataColumn newColumn = new System.Data.DataColumn("SGC#1_Created_By", typeof(System.Int32));
newColumn.DefaultValue = UserId;
_table.Columns.Add(newColumn);
System.Data.DataColumn newColumn1 = new System.Data.DataColumn("SGC#2_Created_On", typeof(System.DateTime));
newColumn1.DefaultValue = DateTime.Now;
_table.Columns.Add(newColumn1);
System.Data.DataColumn newColumn2 = new System.Data.DataColumn("SGC#3_IsProcessed", typeof(System.Int32));
newColumn2.DefaultValue = 0;
_table.Columns.Add(newColumn2);
System.Data.DataColumn newColumn3 = new System.Data.DataColumn("SGC#4_Processed_On", typeof(System.DateTime));
newColumn3.DefaultValue = DateTime.Now;
_table.Columns.Add(newColumn3);
SqlConnection sqlConn = new SqlConnection(DBConnection);
sqlbc.DestinationTableName = "iCon." + lbsheet[tbl].Trim();
sqlbc.WriteToServer(_table);
sqlConn.Close();
sqlConn.Open();
int ErrorListId = GetErrorListLastIdentity(DBConnection);
_LBErrocount += 1;
DsLocalBorrowingTbl.Tables[tbl].Rows.Count, DsLocalBorrowingTbl.Tables[tbl].Rows.Count, DBConnection, 1);
int statusCount = Convert.ToInt32(DsLocalBorrowingTbl.Tables[tbl].Rows.Count);
transaction.Commit();
_rowcount += DsLocalBorrowingTbl.Tables[tbl].Rows.Count;
}
}
bulkcon.Close();
}
catch (Exception ex)
{
WriteToFile(" StartExcelOperations_LocalBorrowing_Insertion error :" + ex.Message.ToString());
}
看來您是首先創建數據表,然后用其中的一個覆蓋它,我猜是 static class。 對此 function 的任何后續調用都應該產生問題。 刪除第二行,或者在初始化 function 中添加一次列。
DataTable _table = new DataTable();
_table = DsLocalBorrowingTbl.Tables[tbl];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.