2016-09-11 8 views
0

状況は次のとおりですが、SQL Serverにストアドプロシージャがありますが、これにはいくつかの出力パラメータがあり、そのうちの1つはビットタイプです。そのパラメータは変換エラー、InvalidCastExceptionがあります。C#のストアドプロシージャからビット値を取得する

これは私のコードです:

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型の変数にビットパラメータをアサインしようとしています。コメントに投稿された質問。

+0

あなたが取得している正確なエラーとは何ですか? –

+0

@RobertColumbia 'InvalidCastException' – TimeToCode

+0

@RobertColumbia私は答えを – TimeToCode

答えて

2

私は、これまで(int)変更になりました完璧に動作します:この次の行を

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

私はビットがブール値に変換されると信じています。あなたのコードも少しシンプルにするはずです。

すなわち

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

で解決しました。この変換を行う方法を教えてください。 –

+0

intにキャストする代わりに。ブールにキャスト。 – meganaut

+0

あなたはそれをあなたの答えに加えるべきです。 –

1

使用

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!"); 
} 

** UPDATE:**もしビット列はヌルを許可します - あなたがこれを行うことができる多くの方法

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

ともあなたがINTにあなたのブール出力を変換しようとしているthis- SQL Server Data Types and Their .NET Framework Equivalents

0

を読んで、ブールにそれを変換してください:

bool bitValue= Convert.ToBoolean(cmd.Parameters["@bit"].Value) 
関連する問題