C# 判断 SqlDataReader 实例是否包含查询数据库表的列。
在写数据库操作类方法时,假如需要把SqlDataReader 的实例,填充到实体中。
而次查询数据表的列又不是固定的,所以在填充前需要判断 SqlDataReader 的实例 是否包含有列,
才可以适应查询列数不固定,也可以动态的填充,
提高程序的重用性。
/// <summary>
/// 检查 SqlDataReader 实例中是否包含数据表的列
/// </summary>
/// <param name="columnName">实例中是否包含数据表的列</param>
public bool CheckColumnName(SqlDataReader reader, string columnName)
{
bool result = false;
DataTable dt = reader.GetSchemaTable();
foreach (DataRow dr in dt.Rows)
{
if (dr["ColumnName"].ToString() == columnName)
{
result = true;
}
}
return result; //result 为 true则 列名存在
}
public void Test()
{
using (SqlConnection conn = new SqlConnection("server=.;database=MyTest;uid=sa;pwd=justdoit"))
{
conn.Open();
string sql = "SELECT * FROM [User]";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
if (CheckColumnName(reader, "UserName"))
{
//此处自定义代码
}
}
}
}
SqlDataReader的
GetSchemaTable()
方法会返回一个DataTable,里面是SqlDataReader 实例里查询数据库表返回结果集,列的集合。
利用它就可以判断一个SqlDataReader是否包含数据库表的列了。
DataTable 的话可以用 dt.Columns.Contains(string name) 方法判断。