Cun*_*ers 5 sql vb.net sql-server sql-server-2008
我目前正在使用sql数据读取器(在vb.net中)通过SQL Server 2008数据库中的存储过程提取文章对象.该对象的一部分包括以下两个属性:
theArticle.Truthfulness = ((myReader.GetInt32(myReader.GetOrdinal("Truthfulness"))))
theArticle.Relevance = ((myReader.GetInt32(myReader.GetOrdinal("Relevance"))))
Run Code Online (Sandbox Code Playgroud)
我的问题是,真实性和相关性可能会返回一个空值,这会导致函数失效.
我想我理解为什么.我要求一个整数值(getin32),因为返回null失败.
如何容纳数据库中的空值,以免它倒下?
mar*_*c_s 20
您可以检查给定的序号位置是否为空.IsDBNull(),然后执行某些操作 - 例如,将值设置为-1或者其他值:
int myOrdinal = myReader.GetOrdinal("Truthfullness");
if(myReader.IsDBNull(myOrdinal))
{
theArticle.Truthfulness = -1;
}
else
{
theArticle.Truthfulness = myReader.GetInt32(myOrdinal);
}
Run Code Online (Sandbox Code Playgroud)
正如Mike Hofer在他的回答中指出的那样,你也可以将所有这些逻辑包装成一个扩展方法:
public static class SqlDataReaderExtensions
{
public static int SafeGetInt32(this SqlDataReader reader,
string columnName, int defaultValue)
{
int ordinal = reader.GetOrdinal(columnName);
if(!reader.IsDbNull(ordinal))
{
return reader.GetInt32(ordinal);
}
else
{
return defaultValue;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后只使用"SafeGetInt32"方法:
theArticle.Truthfulness = myReader.SafeGetInt32("Truthfullness", -1);
Run Code Online (Sandbox Code Playgroud)
渣
| 归档时间: |
|
| 查看次数: |
19422 次 |
| 最近记录: |