如何在C#中将T-SQL的smallint转换为整数?

11

我在将t-sql中的smallint转换为C#中的整数时遇到了问题。

请问有人能帮我想办法解决这个问题吗?

更新 #1

我的真正目的是从在sqlserver 2005中标记为smallint的列中检索数据,并在我的应用程序中使用datareader。我很抱歉之前没有表述得够清楚。


2
你有什么问题?能给个例子吗? - Mark Byers
1
鉴于从SQL Server获取数据有几种不同的方法,您提供的信息太少了。 - spender
3个回答

13

在C#中,还有一个名为 "short" 的 DataType,对应的是 System.Int16(在SQL Server中又称为 "smallint")。

我更喜欢使用 "short" 这个名称,只是因为它看起来更酷一些,没有其他原因。

此外,如果你的数据可以为空值,我会使用以下代码提取它:

short? sVal = dr["ColName"] is System.DBNull ? null : (short?)(dr["ColName"]);

1
“我更喜欢使用“short”,只是因为我认为它看起来更酷。”一个有效的理由是:当你选择“smallint”时,这是正确的类型。如果你使用“int”,你将允许插入数据库的数字太大了。” - Tim Schmelter
2
我更喜欢使用“short”数据类型而不是结构体“System.Int16”。Int16是一个别名为short的结构体。你可以使用任何一种,都没有问题。我的意思并不是说我更喜欢short而不是int - 那显然是错误的。 - MikeTeeVee

13

不太确定您遇到了什么问题,因为smallint范围的数字是integer值范围的子集。

c#中的标准转换应该可以工作:

int intFromSmallInt = Convert.ToInt16(smallint);

这个错误是由ORM引起的吗?


我试图从SqlDataReader对象中检索它。这就是我最终做的。 dr.GetInt16(dr.GetOrdinal("ColumnName"))。无论如何,谢谢。 - Orson

-3
int? value = (int?)(row["ColumnName"] as short?);

只是减法?能解释一下为什么吗? - isxaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接