在DbDataRecord中使用什么方法来验证列是否存在?

时间:2012-06-29 03:20:44

标签: c# .net-3.5

我想验证该字段是否确实存在于数据库的表中。我已经使用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
    }
}

我希望得到一个好的答案。非常感谢你。

2 个答案:

答案 0 :(得分: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"));
}

答案 1 :(得分: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
    }
}