如何按列名通过SqlDataReader.GetValue获取数据

alg*_*got 43 c# sql

我使用SqlDataReader.GetValue方法从DB读取值:

Log.WriteLine("Value of CompanyName column:" + thisReader.GetValue(1)); 
Run Code Online (Sandbox Code Playgroud)

作为参数GetValue获取列的索引.我怎样才能指定列名而不是索引?

Mau*_*fer 83

Log.WriteLine("Value of CompanyName column:" + thisReader["CompanyName"]); 
Run Code Online (Sandbox Code Playgroud)

  • 我用作下面的解决方法--`Log.WriteLine("CompanyName列的值:"+ thisReader.GetValue(thisReader.GetOrdinal("CompanyName")));`什么[]的意思? (5认同)
  • @tmighty:这是索引集合的一种非常常见的表示法,不仅仅是在C#中.索引通常是整数,但也可以是其他类型,例如string. (5认同)
  • 自我注意,在内部这确实`return GetValue(GetOrdinal(name));`参考https://referencesource.microsoft.com/#system.data/system/data/sqlclient/SqlDataReader.cs (2认同)

Ray*_*Ray 52

你也可以这样做.

//find the index of the CompanyName column
int columnIndex = thisReader.GetOrdinal("CompanyName"); 
//Get the value of the column. Will throw if the value is null.
string companyName = thisReader.GetString(columnIndex);
Run Code Online (Sandbox Code Playgroud)

  • @curiousBoy这样做可以更容易检查列是否存在,还可以确保您选择的值是正确的数据格式,例如GetString,GetInt32它不会返回您必须转换的对象.这就是为什么我会使用这种方法 (2认同)
  • 出于性能原因,Microsoft现在建议您在读取循环之外调用GetOrdinal,而仅在循环内部调用GetString(int) (2认同)