将 Sql 中的位值转换为 C# 中的 Int 的正确方法是什么?
本文关键字:Int 方法 是什么 中的 Sql 转换 | 更新日期: 2023-09-27 18:32:07
问题:将 Sql 中的位值转换为 C# 中的 Int 的正确方法是什么?
目标:使用 Sql2008R2 和 C#,将值转换为整数以插入到另一个表中。
错误:以下代码返回此错误。输入字符串的格式不正确。
public struct Mystruct
{
public Int32 Active
}
public static bool ReturnActivity
{
String sql = "";
{
conn.Open();
sql = "SELECT " +
"database.dbo.table1.Active " +
"FROM " +
"database.dbo.tabe1 ";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
MyStruct ReturnActivity = new MyStruct();
ReturnActivity.Active = Convert.ToInt32(dr.GetValue(0).ToString());
SomeArraylist.Add(MyStruct);
}
dr.Close();
conn.Close();
return true;
}
提前感谢您的任何意见、建议或建议。
使用 GetBoolean
方法将位列的值作为bool
返回:
ReturnActivity.Active = dr.GetBoolean(0) ? 1 : 0;
请注意,?…:
是三元运算符。它将计算?
左侧的布尔表达式,如果true
,则返回:
左侧的值,如果false
,则返回:
右侧的值。
这大致相当于:
if (dr.GetBoolean(0))
{
ReturnActivity.Active = 1;
} else {
ReturnActivity.Active = 0;
}
我假设是这条线
ReturnActivity.Active = Convert.ToInt32(dr.GetValue(0).ToString());
这是失败的。它失败了,因为GetValue
返回一个object
,并且对对象调用ToString
(请注意,它的底层类型是bool
类型)返回的是"True"
或"False"
,而不是你在sql中看到的0
或1
。使用 GetBoolean
将其获取为 bool 类型,然后检查返回值以获取 0 或 1:
ReturnActivity.Active = dr.GetBoolean(0) ? 0 : 1;
另外,还有一种叫做 Verbatim String
的东西,而不是这个:
sql = "SELECT " +
"database.dbo.table1.Active " +
"FROM " +
"database.dbo.tabe1 ";
您可以这样做:
sql = @"SELECT
database.dbo.table1.Active
FROM
database.dbo.tabe1";
这更容易查看和维护。
通常,当您从SQL数据库中提取BIT
值时,您使用GetBoolean()
而不是简单的GetValue()。 然后,只需将布尔值传递给Convert.ToInt32(bool b)
而不是字符串即可。 这将相应地返回 0 或 1。
无需转换为字符串,然后再转换为 int。