我没发现DataReader有HasColumn的样的方法
所以用
object value = null;
try
{
value = dr["Name"];
}
Catch
{}
-----------
但我在对10W条数据进行赋值的时候
如果不出错是22秒
如果try里面出错,那所花的时间就是160秒
所以这里有严重的性能问题
想改成
object value = null
if(dr.HasColumn("Name"))
{
value=dr["Name"]
}那dr有没有HasColumn的方法呢?
谢谢
所以用
object value = null;
try
{
value = dr["Name"];
}
Catch
{}
-----------
但我在对10W条数据进行赋值的时候
如果不出错是22秒
如果try里面出错,那所花的时间就是160秒
所以这里有严重的性能问题
想改成
object value = null
if(dr.HasColumn("Name"))
{
value=dr["Name"]
}那dr有没有HasColumn的方法呢?
谢谢
{ dr.GetSchemaTable().DefaultView.RowFilter = "ColumnName= '" + columnName + "'"; return (dr.GetSchemaTable().DefaultView.Count > 0); }
rows.Table.Columns.Contains( "fieldname ")
所以正确取列值,本来代码自己应该保证的。也就是说写错是你自己的错。如果你想做一个泛用的方法,你应该用index去取值,而跟名字无关。但是...DataReader.FieldCount 可以告诉你有多少列
DataReader.GetName(int) 可以告诉你指定列的列名
DataReader.GetSchemaTable() 可以获得你结果的定义
比如:reader.GetSchemaTable().Rows[0]["ColumnName"] 你可以获得一个列名。
那么:DataRow[] rows = reader.GetSchemaTable().Select("ColumnName='xxx'");
if (rows != null && rows.Count > 0)
//存在xxx列或者,像下面一样操作DataReader,做到和列名无关。
// Given a SqlDataReader, use the GetValues
// method to retrieve a full row of data.
// Test the GetValues method, passing in an array large
// enough for all the columns.
Object[] values = new Object[reader.FieldCount];
int fieldCount = reader.GetValues(values);Console.WriteLine("reader.GetValues retrieved {0} columns.", fieldCount);
for (int i = 0; i < fieldCount; i++)
Console.WriteLine(values[i]);