1

问题:将 Sql 中的位值转换为 C# 中的 Int 的正确方法是什么?

Objective:使用 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;
     }

提前感谢您的任何意见、建议或建议。

4

3 回答 3

3

使用该GetBoolean方法将位列的值作为 a 返回bool

ReturnActivity.Active = dr.GetBoolean(0) ? 1 : 0;

注意?…:三元运算符。它将计算 the 左侧的布尔表达式?并返回:if it is左侧的值,或者 if it istrue右侧的值。:false

这大致相当于:

if (dr.GetBoolean(0))
{
    ReturnActivity.Active = 1;
} else {
    ReturnActivity.Active = 0;
}
于 2013-09-20T16:42:16.913 回答
2

我假设这是行

ReturnActivity.Active = Convert.ToInt32(dr.GetValue(0).ToString());

那是失败的。它失败了,因为GetValue返回一个object, 并且调用ToString对象(注意它的基础类型是 type bool)正在返回"True"or "False",而不是您在 sql.xml 中看到的0or 。1用于GetBoolean将其作为 bool 类型获取,然后检查返回值以获取 0 或 1:

ReturnActivity.Active = dr.GetBoolean(0) ? 0 : 1;

此外,还有一个叫做 a 的东西Verbatim String,而不是这个:

sql = "SELECT " +
      "database.dbo.table1.Active " +
      "FROM " +
      "database.dbo.tabe1 ";

你可以这样做:

sql = @"SELECT 
            database.dbo.table1.Active
        FROM
            database.dbo.tabe1";

这更容易查看和维护。

于 2013-09-20T16:49:49.047 回答
1

通常,当您BIT从 SQL 数据库中提取值时,您使用GetBoolean()的不是简单的 GetValue()。然后,您可以简单地将布尔值传递给Convert.ToInt32(bool b)而不是字符串。这将相应地返回 0 或 1。

无需转换为字符串然后再转换回 int。

于 2013-09-20T16:48:46.777 回答