ストアドプロシージャを実行し、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"))でない場合
助けていただければ幸いです!
これは動作するはずです。
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();
}
}
}
}
}
これにより、ブロック{..}の外側のリソースが自動的に破棄(クローズ)されます。
慣用的な方法はこう言うことです:
if(rsData["usr.ursrdaystime"] != DBNull.Value) {
strLevel = rsData["usr.ursrdaystime"].ToString();
}
この:
rsData = objCmd.ExecuteReader();
rsData.Read();
正確に1つの値を読んでいるように見えます。代わりにIDbCommand.ExecuteScalar
を使用してください。
はい、単なる構文の問題です。代わりにこれを試してください:
if (reader["usr.ursrdaystime"] != DBNull.Value)
.Equals()
は 2つのObjectインスタンスが同じ かどうかを確認しています。
考慮してください:
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
String.IsNullorEmptyを頻繁に使用します。 DBNullが.ToStringに設定されている場合は空を返すため、彼女は機能します。
if(!(String.IsNullorEmpty(rsData["usr.ursrdaystime"].toString())){
strLevel = rsData["usr.ursrdaystime"].toString();
}
if(!rsData.IsDBNull(rsData.GetOrdinal("usr.ursrdaystime")))
{
strLevel = rsData.GetString("usr.ursrdaystime");
}
http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull.aspx
http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getordinal.aspx
三項演算子はここでうまくやるべきです:condition?first_expression:second_expression;
strLevel =!Convert.IsDBNull(rsData ["usr.ursrdaystime"])? Convert.ToString(rsData ["usr.ursrdaystime"]):null