gpt4 book ai didi

c# - DataRow.Field(string Column) 抛出无效转换异常

转载 作者:太空狗 更新时间:2023-10-29 18:03:05 26 4
gpt4 key购买 nike

你好,

IDE Visual Studio 2010
.NET 3.5
平台WinForms

SO 问题“difference between getting value from DataRow”指的是。

我有一个包含列 [ID] INT IDENTITY(1, 1) NOT NULL PRIMARY KEY 的数据库表.当查询这个表并将值存储在局部变量中时,我得到一个无效的转换异常;示例代码:

string sQuery = @"
SELECT [ID], [Description]
FROM [Sources]
ORDER BY [Description] ";

using (DataTable dtSources = SQLHelper.Fetch(sQuery))
{
foreach (DataRow drSource in dtSources.Rows)
{
int iID = drSource.Field<int>("ID"); // InvalidCastException
string sDescrption = drSource.Field<string>("Description");
}
}

当逐步执行并在故障线路上执行“快速观察”时,我发现,通过将线路更改为 drSource.Field<object>("ID") , 单元格值类型为 short而不是 int .为什么会发生这种情况,在表定义中,这显然是 int ?此外,short应隐式转换为 intshort更小,应该“适合”吧?

最佳答案

如果您的列是一个可为空的 int,但您试图分配给一个默认值为 0 的 int:

using (DataTable dtSources = SQLHelper.Fetch(sQuery))
{
foreach (DataRow drSource in dtSources.Rows)'
{
int iID = drSource.Field<int?>("ID") ?? 0;
string sDescrption = drSource.Field<string>("Description");
}
}

如果您的列是一个可为 null 的 int,并且您想分配给一个可为 null 的 int:

using (DataTable dtSources = SQLHelper.Fetch(sQuery))
{
foreach (DataRow drSource in dtSources.Rows)
{
int? iID = drSource.Field<int?>("ID");
string sDescrption = drSource.Field<string>("Description");
}
}

关于c# - DataRow.Field<T>(string Column) 抛出无效转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9885601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com