我想为返回字符串的“ProductState”列处理空值。
但是 isDBNull 仅接受整数参数。请在这里更改什么?

string _productState = "";

if (!dr.IsDBNull("ProductState"))
                    _productState= dr.GetString("ProductState");
                else
                    _productState= "";

最佳答案

SqlDataReader.GetOrdinal是您的答案

if (!dr.IsDBNull(dr.GetOrdinal("ProductState")))

您可以编写扩展方法来封装此功能
public static class ReaderExtensions
{
     public static bool IsDBNull(this SqlDataReader reader, string colName)
     {
          return reader.IsDBNull(reader.GetOrdinal(colName));
     }
}

现在,您将能够通过字符串调用IsDBNull
if (!dr.IsDBNull("ProductState"))

在查看代码(reader.GetString("ProductState"))时,我认为您正在使用MySql提供程序,该提供程序提供了扩展名GetString(以及其他GetXXXX),该扩展名以列名作为参数。但是,如果您有SqlDataReader,则还需要使用GetOrdinal(或其他扩展名)更改该调用,因为SqlClient没有以列名作为参数的GetString。

09-13 06:58