在读数据dataReader["Contact"] 的时候 如果数据源中没有Contact 这列 就会出错能不能再读这个列之前  判断一下有没有这个列?

解决方案 »

  1.   

    换成DataTable吧,可以判断下对应的Column有没有名为Contact的
      

  2.   

    可以捕获一下 IndexOutOfRangeException 错误            try
                {
                }
                catch (IndexOutOfRangeException e)
                {
                }
      

  3.   

    dataReader.GetSchemaTable().Columns.Contains("Contact")

     try
                {
                }
                catch (IndexOutOfRangeException e)
                {
                }
    那种效率高?
      

  4.   

    IDataRecord.GetOrdinal 方法
    GetOrdinal 首先执行区分大小写的查找。如果失败,则进行另一次不区分大小写的搜索。 GetOrdinal 不区分假名宽度。如果未找到指定字段的索引,则引发 IndexOutOfRangeException。由于基于序号的查找比命名查找更为有效,因此在循环中调用 GetOrdinal 的效率较低。为了节省时间,可以调用一次 GetOrdinal,然后将结果分配给整数变量以便在循环中使用。http://msdn.microsoft.com/zh-cn/library/vstudio/system.data.idatarecord.getordinal.aspx