用于数值数据类型的 SqlDataReader
Posted
技术标签:
【中文标题】用于数值数据类型的 SqlDataReader【英文标题】:SqlDataReader for numeric data type 【发布时间】:2013-07-04 06:52:48 【问题描述】:我有这个代码:
public void nactiData()
SqlCommand cm = new SqlCommand("SELECT * FROM zajezd WHERE akce="+nc_zajezd_vyber, con);
con.Open();
SqlDataReader reader = cm.ExecuteReader();
if (reader.Read())
zpocdnu.Text = reader.GetInt32(31).ToString();
zcena3.Text = reader.GetDecimal(6).ToString();
con.Close();
问题是它没有读取zcena3
,因为表中的数据类型是numeric
。
在微软的网站上写着我应该用GetDecimal
阅读它,但它也不起作用。
有什么解决办法吗?
【问题讨论】:
将*
与列位置一起使用是自找麻烦。写出列名,如GetString("col1")
我试过了,应该用什么替换*?
SQL Server 中的这些列是什么确切 数据类型?如果它们是int
、smallint
或bigint
;你需要使用.GetInt16/.GetInt32/.GetInt64
(不是.GetDecimal
)。您说使用GetDecimal
不起作用 - 如何不起作用?你有错误吗?如果是这样:什么错误?
哦,GetDecimal 确实有效,我允许空值。谢谢
@Andomar:应该是reader.GetString(reader.GetOrdinal("col1"))
(通常调用GetOrdinal
的结果只会执行一次,然后缓存在一个变量中)。
【参考方案1】:
(你自己解决了你的问题,但让我提出以下建议。)
由于您使用的是 SQL Server 数据读取器,因此请使用 GetSqlDecimal
而不是 GetDecimal
:
NULL
(通过返回的SqlDecimal
值的IsNull
属性)。
【讨论】:
以上是关于用于数值数据类型的 SqlDataReader的主要内容,如果未能解决你的问题,请参考以下文章