【问题标题】:Getting a bit value from stored procedure in C#从 C# 中的存储过程中获取位值
【发布时间】:2016-09-11 00:55:12
【问题描述】:

情况如下,我在 SQL Server 中有一个存储过程,它有几个输出参数,其中一个是位类型,我想要取那个参数的值,但是我有一个转换错误, InvalidCastException.

这是我的代码:

public void exec()
       {
            String strConnString = "Server=.\\SQLEXPRESS;Database=recalls;Integrated Security=true";
            SqlConnection con = new SqlConnection(strConnString);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "findVinCamp";
            int c = Int32.Parse(campaing.Text);
            cmd.Parameters.Add("@camp", SqlDbType.Int).Value = c;
            cmd.Parameters.Add("@vin", SqlDbType.VarChar, 100).Value = vin.Text;
            cmd.Parameters.Add("@desc", SqlDbType.NVarChar, 255).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("@st", SqlDbType.VarChar, 50).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("@bit", SqlDbType.Bit).Direction = ParameterDirection.Output;
            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
            bit = (int)cmd.Parameters["@bit"].Value; //Exception Here
            if (bit == 1)
            {
                desc.Text = cmd.Parameters["@desc"].Value.ToString();
                stt.Text = cmd.Parameters["@st"].Value.ToString();
                camp = cmd.Parameters["@camp"].Value.ToString();
                if (stt.Text.Equals("APPLIED"))
                {
                    stt.ForeColor = System.Drawing.Color.LawnGreen;
                }
                else
                {
                    stt.ForeColor = System.Drawing.Color.Firebrick;
                    label3.Enabled = true;
                    newstatus.Enabled = true;
                    update.Enabled = true;
                }
            }
            else
            {
                MessageBox.Show("Doesn't exits!");
            }
    }

我正在尝试将位参数分配给一个 int 变量。在 cmets 上发布任何问题。

【问题讨论】:

  • 你得到的确切错误是什么?
  • @RobertColumbia InvalidCastException
  • @RobertColumbia 我把解决方案放在自己的答案中

标签: c# sql-server stored-procedures parameters


【解决方案1】:

我将(int) 改成这个,现在可以正常工作了:

Boolean lol = Convert.ToBoolean(cmd.Parameters["@bit"].Value);

【讨论】:

    【解决方案2】:

    使用下面这行

    bool isConfirmed = (bool)cmd.Parameters["@bit"].Value;
    if(isConfirmed ){
                    desc.Text = cmd.Parameters["@desc"].Value.ToString();
                    stt.Text = cmd.Parameters["@st"].Value.ToString();
                    camp = cmd.Parameters["@camp"].Value.ToString();
                    if (stt.Text.Equals("APPLIED"))
                    {
                        stt.ForeColor = System.Drawing.Color.LawnGreen;
                    }
                    else
                    {
                        stt.ForeColor = System.Drawing.Color.Firebrick;
                        label3.Enabled = true;
                        newstatus.Enabled = true;
                        update.Enabled = true;
                    }
    
    }
    else{
    MessageBox.Show("Doesn't exits!");
    }
    

    **更新:**如果位列允许空值 - 您可以通过多种方式做到这一点

    bool isConfirmed = cmd.Parameters["@bit"].Value as bool? ?? null;
    

    并阅读此内容-SQL Server Data Types and Their .NET Framework Equivalents

    【讨论】:

      【解决方案3】:

      我相信有点会转换为布尔值。这也应该使您的代码更简单一些。

      ...
      var bit = (bool)cmd.Parameters["@bit"].Value;
      if (bit)
      {
      ...
      

      【讨论】:

      • 而不是强制转换为 int。转换为布尔值。
      • 您应该将其添加到您的答案中。
      【解决方案4】:

      您正在尝试将布尔输出转换为 INT,请将其转换为布尔:

      bool bitValue= Convert.ToBoolean(cmd.Parameters["@bit"].Value)
      

      【讨论】:

        猜你喜欢
        • 2017-01-01
        • 1970-01-01
        • 2010-10-16
        • 2021-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-14
        • 1970-01-01
        相关资源
        最近更新 更多