无法隐式将对象转换为字符串

时间:2015-06-01 14:58:18

标签: c# sql asp.net

当我尝试这样做时,我在下面收到此消息

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();
        }
    }

3 个答案:

答案 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。