当我尝试这样做时,我在下面收到此消息
ThisString= reader["ThisString"];
以下内容:
string ThisString;
using (SqlConnection con = new SqlConnection("connectionstring"))
{
using (SqlCommand cmd = new SqlCommand("SELECT * FROM table WHERE parameter=@parameter", con))
{
cmd.Parameters.AddWithValue("@parameter", parameter);
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
while (reader.Read())
{
ThisString= reader["ThisString"];
}
}
SqlDataAdapter da = new SqlDataAdapter(cmd);
con.Close();
}
}
答案 0 :(得分:2)
您收到错误是因为通过字符串索引从reader中检索项目返回为类型对象,如下面的signature所示:
public override Object this[string name] { get; }
通常,要轻松地从对象转换为字符串,您可以在结果上调用.ToString()
。
ThisString = reader["ThisString"].ToString();
但是,由于这在使用SqlDataReader时不安全,因为它不会处理空引用异常或DBNull,所以您应该使用阅读器的GetOrdinal()和GetString()方法。
var ordinal = reader.GetOrdinal("ThisString")
if (ordinal > -1)
{
ThisString = reader.GetString(ordinal);
}
通过检查数据读取器中列的序号,确保您的目标列存在。如果值为-1,则表示该值不存在,您不应尝试调用GetString()
。
答案 1 :(得分:1)
ThisString= Convert.ToString(reader["ThisString"]);
这也可以使您免于Null Reference Exception,如果是DBNull.Value
,您将获得一个空字符串。
您还可以使用SqlDataReader.GetString
方法并指定列索引。
ThisString= reader.GetString(0);//assuimg 0 is the column index
或使用SqlDataReader.GetOridnal
方法获取列索引,然后使用reader.GetString
。
答案 2 :(得分:0)
sqlReader has methods从中读取字符串和其他强类型对象。
尝试使用reader.IsDBNull(ColIndex)
检查DBNull
尝试使用reader.GetString(ColIndex)
从数据库中读取字符串
尝试使用reader.GetOrdinal("ThisString")
读取列的ColumnIndex。