簡體   English   中英

Window 服務 C# - 刷新問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM