[英]I get no errors when adding a row to a DataTable, but the row is not added to the database
[英]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。
模式返回的特定列數據類型為(按列排序)
看起來應該在第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.