我希望你们能帮我弄清楚为什么会发生这种情况。我一直在试图弄清楚这件事。将行添加到数据表时出现奇怪的错误
下面直接是一个例子从我的代码(跟无聊位切出)
...(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#不是敏感信息吗?你可以给我们的信息越多越好。 –
添加了更多细节。认为很多规范是不必要的。 –