web-dev-qa-db-ja.com

DBNull ifステートメント

ストアドプロシージャを実行し、ifステートメントを使用してnull値をチェックしようとしていますが、もうすぐです。私はVB男なので、男子生徒の構文エラーを犯した場合はご容赦ください。

objConn = new SqlConnection(strConnection);
objConn.Open();
objCmd = new SqlCommand(strSQL, objConn);
rsData = objCmd.ExecuteReader();
rsData.Read();

if (!(rsData["usr.ursrdaystime"].Equals(System.DBNull.Value)))
        {
            strLevel = rsData["usr.ursrdaystime"].ToString();

        }

これにより、SQL接続が値のみを返しているかどうかを確認できますか?

私は値が返されているかどうかを確認するために以下を確認することができ、C#で正しくそれを行っているかどうかわからないことに慣れています

IsDBNull(rsData( "usr.ursrdaystime"))でない場合

助けていただければ幸いです!

51
PipBoy

これは動作するはずです。

if (rsData["usr.ursrdaystime"] != System.DBNull.Value))
{
    strLevel = rsData["usr.ursrdaystime"].ToString();
}

また、次のようなusingステートメントを追加する必要があります。

using (var objConn = new SqlConnection(strConnection))
     {
        objConn.Open();
        using (var objCmd = new SqlCommand(strSQL, objConn))
        {
           using (var rsData = objCmd.ExecuteReader())
           {
              while (rsData.Read())
              {
                 if (rsData["usr.ursrdaystime"] != System.DBNull.Value)
                 {
                    strLevel = rsData["usr.ursrdaystime"].ToString();
                 }
              }
           }
        }
     }

これにより、ブロック{..}の外側のリソースが自動的に破棄(クローズ)されます。

94
Kamil Lach

慣用的な方法はこう言うことです:

if(rsData["usr.ursrdaystime"] != DBNull.Value) {
    strLevel = rsData["usr.ursrdaystime"].ToString();
}

この:

rsData = objCmd.ExecuteReader();
rsData.Read();

正確に1つの値を読んでいるように見えます。代わりにIDbCommand.ExecuteScalarを使用してください。

9
jason

VBに最も近いものは( これを参照 ):

Convert.IsDBNull()

しかし、これを行うにはいくつかの方法があり、ほとんどはリンクされています ここから

4
Cade Roux

はい、単なる構文の問題です。代わりにこれを試してください:

if (reader["usr.ursrdaystime"] != DBNull.Value)

.Equals()2つのObjectインスタンスが同じ かどうかを確認しています。

3
mgnoonan

考慮してください:

if(rsData.Read()) {
  int index = rsData.GetOrdinal("columnName"); // I expect, just "ursrdaystime"
  if(rsData.IsDBNull(index)) {
     // is a null
  } else {
     // access the value via any of the rsData.Get*(index) methods
  }
} else {
  // no row returned
}

また、さらに必要なusing; p

2
Marc Gravell

String.IsNullorEmptyを頻繁に使用します。 DBNullが.ToStringに設定されている場合は空を返すため、彼女は機能します。

if(!(String.IsNullorEmpty(rsData["usr.ursrdaystime"].toString())){
        strLevel = rsData["usr.ursrdaystime"].toString();
    }
0
dstineback
0
Tim Schmelter

三項演算子はここでうまくやるべきです:condition?first_expression:second_expression;

strLevel =!Convert.IsDBNull(rsData ["usr.ursrdaystime"])? Convert.ToString(rsData ["usr.ursrdaystime"]):null

0
Goran Šutić