将 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;
     }

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

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

使用 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中看到的01。使用 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。