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方法来遍历阅读器中的每个字段并返回真/假。

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 回答