0

フィールドがデータベースのテーブルに実際に存在するかどうかを検証したいと思います。データの読み取りにSqlDataReaderクラスを使用しました。SqlDataReaderに値を割り当てた後、foreachを使用して各レコードを反復処理するループを作成しました。これがサンプルコードです。

SqlCommand sqlCommand = new SqlCommand();

SqlDataReader sqlDr = sqlCommand.ExecuteReader();

Foreach(DbDataRecord record in sqlDr)
{
    // Validate if the value is not null and (I want to validate if this field really exist in the table)
    if(record["MyField1"].GetType().ToString() == "System.DBNull")
    {
        // Statement here
    }
}

親切な回答をお願いします。どうもありがとうございます。

4

2 に答える 2

2

extensionリーダーの各フィールドを反復処理してtrue/falseを返すメソッドを作成します。

public static class DataRecordExtensions
{
    public static bool HasColumn(this IDataRecord dr, string columnName)
    {
        for (int i = 0; i < dr.FieldCount; i++)
        {
            if (dr.GetName(i).Equals(columnName, StringComparison.InvariantCultureIgnoreCase))
                return true;
        }
        return false;
    }
}

次に、このように呼び出します

if (objReader.HasColumn("FirstName")
{
  //Column exist. So lets read the value
   someobject.Name= objReader.GetString(objReader.GetOrdinal("FirstName"));
}
于 2012-06-29T04:15:02.417 に答える
0

あなたの質問のコードと同様のコードを維持することで、次のように行うことができます。

using (SqlCommand sqlCommand = new SqlCommand())
{
    SqlDataReader sqlDr = sqlCommand.ExecuteReader();

    if (!sqlDr.Read()) return;

    HashSet<string> fieldNames = new HashSet<string>(sqlDr.FieldCount);
    for (int i = 0; i < sqlDr.FieldCount; i++)
    {
        fieldNames.Add(sqlDr.GetName(i));
    }

    if (!fieldNames.Contains("MyField1") || !fieldNames.Contains("MyField2"))
    {
        // do something here
    }
}
于 2012-06-29T04:06:54.140 に答える