我希望你們能幫我弄清楚爲什麼會發生這種情況。我一直在試圖弄清楚這件事。將行添加到數據表時出現奇怪的錯誤
下面直接是一個例子從我的代碼(跟無聊位切出)
...(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正確format.Couldn't店柱。預期的類型是Int16。
如由模式返回的特定列中的數據類型(由列排序)
- System.Data.SqlTypes.SqlInt32
- System.Data.SqlTypes.SqlInt32
- 系統。 Data.SqlTypes.SqlByte
- System.Data.SqlTypes.SqlMoney
- System.Data.SqlTypes.SqlString
- System.Data.SqlTypes.SqlGuid
- System.Data.SqlTypes.SqlDateTime
這樣看來,這應該是在列#5的數據實際上是出現在3#列。但這是純粹的猜測。
我所知道的是,爲了將數據表「動態地」用於可以繼續任意數量的不同類型數據的查詢,最佳路徑是使用GetSchemaTable()來檢索它。
我看到了在調試器
當我投進調試我看了一下DataTable的類型從模式內置主場迎戰類型從reader.GetValues返回到對象()。 他們完全一樣。
看起來好像dataTable.Rows.Add(緩衝區)正在從應該從哪裏添加幾列。但這不應該是可能的。特別是在讀者構建的模式是直接。我在ExecuteReader()中使用了諸如「CommandBehavior.KeyInfo」之類的選項,並且仍然發生相同的錯誤。
注意:我需要以這種方式運行查詢以使最終用戶能夠中止查詢。請不要建議我放棄這個並使用SqlDataAdapter或DataTable.Load()解決方案。
我非常感謝任何幫助。謝謝!
當然#TYPE#不是敏感信息嗎?你可以給我們的信息越多越好。 –
添加了更多細節。認爲很多規範是不必要的。 –