首页 > 解决方案 > 窗口服务 C# - 刷新问题

问题描述

我正在安排一个 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());
}

标签: c#.netweb-servicesc#-4.0windows-services

解决方案


看来您是首先创建数据表,然后用其中的一个覆盖它,我猜是一个静态类。对该函数的任何后续调用都应该产生问题。要么删除第二行,要么在初始化函数中添加一次列。

DataTable _table = new DataTable();
_table = DsLocalBorrowingTbl.Tables[tbl];

推荐阅读