我想验证该字段是否确实存在于数据库的表中。我已经使用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
}
}
我希望得到一个好的答案。非常感谢你。
答案 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
}
}