簡體   English   中英

向數據表添加行時出現奇怪的錯誤

[英]Strange error when adding row to datatable

我希望你們能幫助我弄清楚為什么會這樣。 我一直在試圖解決這個問題。

這是直接來自我的代碼的示例(刪去了一些無聊的內容)

...(Set up the connection and command, initialize a datatable "dataTable")...

using (SqlDataReader reader = cmd.ExecuteReader())
{
   //Query storage object
   object[] buffer = new object[reader.FieldCount];

   //Set the datatable schema to the schema from the query
   dataTable = reader.GetSchemaTable();


   //Read the query
   while (reader.Read())
   {  
    reader.GetValues(buffer);
    dataTable.Rows.Add(buffer);
   }
}                        

錯誤是

輸入的字符串格式不正確。無法存儲在NumericScale Column中。 預期的類型是Int16。

模式返回的特定列數據類型為(按列排序)

  1. System.Data.SqlTypes.SqlInt32
  2. System.Data.SqlTypes.SqlInt32
  3. System.Data.SqlTypes.SqlByte
  4. System.Data.SqlTypes.SqlMoney
  5. System.Data.SqlTypes.SqlString
  6. System.Data.SqlTypes.SqlGuid
  7. System.Data.SqlTypes.SqlDateTime

看起來應該在第5列中的數據實際上出現在第3列中。 但這純粹是猜測。

我所知道的是,為了在查詢中“動態”使用dataTable,該查詢可以繼續許多不同類型的數據,最好的方法是使用GetSchemaTable()檢索它。

我在調試器中看到的內容

當我進入調試器時,我研究了從模式構建的dataTable的類型與從reader.GetValues()返回給對象的類型。 他們是完全一樣的

好像dataTable.Rows.Add(buffer)正在將列添加到應有的位置。 但這不可能。 特別是直接從讀者那里構建模式。 我在ExecuteReader()中使用了諸如“ CommandBehavior.KeyInfo”之類的選項,但仍然發生相同的錯誤。

注意:我需要以這種方式運行查詢,以使最終用戶能夠中止查詢。 請不要建議我取消此操作,並使用SqlDataAdapter或DataTable.Load()解決方案。

我真的很感謝您的幫助。 謝謝!

方法DbDataReader.GetSchemaTable()返回包含列名稱和類型的元數據表。 它不是一個空表。 有關更多詳細信息,請參見MSDN。

抱歉, GetSchemaTable檢索給定表的模式 ,而GetValues檢索實際的行數據 例如,您的dataTable將包含列名稱,列類型等列(請參見MSDN參考 ),而您的buffer將包含實際數據,這些數據的表示形式將不同於dataTable包含的內容。

您為什么不只使用:

dataTable.Fill();

為什么您一次要手動加載一行?

請檢查您要插入哪種氣體GUID數據類型的列行中的內容。 我遇到了同樣的錯誤,發現從csv文件讀取記錄后插入記錄時,csv文件中有幾個空白。

暫無
暫無

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

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