簡體   English   中英

無法將新行添加到 DataTable

[英]Trouble adding new rows into a DataTable

這是我的數據表:

DataTable CSVFile = new DataTable();
CSVFile.Columns.Add("Occurrence_Date", typeof(DateTime));
CSVFile.Columns.Add("Preanalytical_Before_Testing", typeof(string));
CSVFile.Columns.Add("Cup_Type", typeof(string));
CSVFile.Columns.Add("Analytical_Testing_Phase", typeof(string));
CSVFile.Columns.Add("Area", typeof(string));
CSVFile.Columns.Add("Postanalytical_After_Testing", typeof(string));
CSVFile.Columns.Add("Other", typeof(string));
CSVFile.Columns.Add("Practice_Code", typeof(string));
CSVFile.Columns.Add("Comments", typeof(string));

我正在嘗試向其中添加一個新行:

DataRow newRow = CSVFile.NewRow();
newRow["Occurrence_Date"] =  Convert.ToDateTime(splitcsvlines[GetColumnsNames.Occurrence_Date]);
newRow["Preanalytical_Before_Testing"] = splitcsvlines[GetColumnsNames.Preanalytical_Before_Testing];
newRow["Cup_Type"] = splitcsvlines[GetColumnsNames.Cup_Type];
newRow["Analytical_Testing_Phase"] = splitcsvlines[GetColumnsNames.Analytical_Testing_Phase];
newRow["Area"] = splitcsvlines[GetColumnsNames.Area];
newRow["Postanalytical_After_Testing"] = splitcsvlines[GetColumnsNames.Postanalytical_After_Testing];
newRow["Other"] = splitcsvlines[GetColumnsNames.Other];
newRow["Practice_Code"] = splitcsvlines[GetColumnsNames.Practice_Code];
newRow["Comments"] = splitcsvlines[GetColumnsNames.Comments];
CSVFile.Rows.Add(newRow);

但是我收到一個錯誤

'BulkUploadToLOMDatabase.GetColumnsNames' 的類型初始化程序引發了異常。`

我試圖只做newRow["Cup_Type"] = "something"newRow[2] = "something"仍然得到同樣的錯誤

這是 class 的樣子:

class GetColumnsNames
{

  public static int Occurrence_Date = Convert.ToInt16(ConfigurationSettings.AppSettings["Occurrence_Date"].ToString());
  public static int Preanalytical_Before_Testing = Convert.ToInt16(ConfigurationSettings.AppSettings["1_0_Preanalytical_Before_Testing"].ToString());
  public static int Cup_Type = Convert.ToInt16(ConfigurationSettings.AppSettings["Cup_Type"].ToString());
  public static int Analytical_Testing_Phase = Convert.ToInt16(ConfigurationSettings.AppSettings["Analytical_Testing_Phase"].ToString());
  public static int Area = Convert.ToInt16(ConfigurationSettings.AppSettings["Area"].ToString());
  public static int Postanalytical_After_Testing = Convert.ToInt16(ConfigurationSettings.AppSettings["Postanalytical_After_Testing"].ToString());
  public static int Other = Convert.ToInt16(ConfigurationSettings.AppSettings["Other"].ToString());
  public static int Practice_Code = Convert.ToInt16(ConfigurationSettings.AppSettings["Practice_Code"].ToString());
  public static int Comments = Convert.ToInt16(ConfigurationSettings.AppSettings["Comments"].ToString());
}

我究竟做錯了什么? 我的 class 出了什么問題?

The type initializer for BulkUploadToLOMDatabase.GetColumnsNames' threw an exception.

這意味着 CLR 嘗試創建您的類型但失敗了。 由於您有一堆 static 變量依賴於可能KeyNotFound FormatExecption NullException失敗的調用,因此您應該將此 class 轉換為Z2ED500A3529637175E675A8791B7C56E

這樣您就可以正確捕獲 ConfigurationSettings.AppSettings 的任何問題

順便說一句,您可能要考慮改用system.configuration.configurationmanager 那是除非你在 1.1 中。 ConfigurationSettings.AppSettings 在 2.0 中已過時

確保 ConfigurationSettings.AppSettings 具有您要求的 integer 值。 看起來這是在拋出錯誤。

您的數據表和數據行代碼很好。

我認為問題出現是因為這行代碼:

public static int Occurrence_Date = Convert.ToInt16(ConfigurationSettings.AppSettings["Occurrence_Date"].ToString());

int32 值不能轉換為 DateTime 值:

newRow["Occurrence_Date"] =  Convert.ToDateTime(splitcsvlines[GetColumnsNames.Occurrence_Date]);

正如@LarsTech 所說,您的 dataTable 相關代碼是正確的。 最危險的是我上面發布的代碼。 請在一個簡單的控制台中實現它,其中這個 (ConfigurationSettings.AppSettings["Occurrence_Date"].ToString() ) 特定值轉換為 int15,然后轉換為 DateTime。 你的結果是什么?

正如其他人所提到的,構建/加載表格很好......這是快速測試,使用序號 position 與列名來加載 10 個隨機值。 您在評論中說調試顯示正確的值,如果是這樣,那么一切都應該正常工作。 只需“確保”您獲得每個列值的預期數據類型。

        DataTable CSVFile = new DataTable();
        CSVFile.Columns.Add("Occurrence_Date", typeof(DateTime));
        CSVFile.Columns.Add("Preanalytical_Before_Testing", typeof(string));
        CSVFile.Columns.Add("Cup_Type", typeof(string));
        CSVFile.Columns.Add("Analytical_Testing_Phase", typeof(string));
        CSVFile.Columns.Add("Area", typeof(string));
        CSVFile.Columns.Add("Postanalytical_After_Testing", typeof(string));
        CSVFile.Columns.Add("Other", typeof(string));
        CSVFile.Columns.Add("Practice_Code", typeof(string));
        CSVFile.Columns.Add("Comments", typeof(string));

        for (int i = 0; i < 10; i++)
        {
            DataRow row = CSVFile.NewRow();
            row[0] = DateTime.Now.AddDays(i);
            row[1] = "Field 2";
            row[2] = "Field 3";
            row[3] = "Field 4";
            row[4] = "Field 5";
            row[5] = "Field 6";
            row[6] = "Field 7";
            row[7] = "Field 8";
            row[8] = "Field 9";

            CSVFile.Rows.Add(row);
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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