修复类似'的错误,无法将类型对象隐式转换为字符串'

时间:2014-04-19 07:11:23

标签: c# asp.net sql

我在项目中使用了一个类。但是我面临着sql错误 使用此代码

public string GetScalerValue(string Qstr)
{
    cmd.Parameters.Clear();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = Qstr;
    cmd.Connection = constr;
    string retvalue = null;
    try
    {
        CreateConn();
        retvalue = cmd.ExecuteScalar();
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
    finally
    {
        CloseConn();
    }
    return retvalue;
}
<{1>}上的{p> 它产生了这个错误。

4 个答案:

答案 0 :(得分:4)

如果您的第一列是varchar或类似列ExecuteScalar(),则可能会有效地返回3个不同的内容。

  1. 字符串,无论数据库中的值是什么
  2. null,这表示查询返回的行
  3. DbNull.Value,这表示返回的行但sql中的值为NULL
  4. 由于返回的对象可能是string类型或DbNull类型,因此它必须返回object,因为这是可以容纳这两个对象的最常见类型。

    如果您知道自己的查询将始终返回行,可能是NULL,也可能不是as,您可以使用retvalue = cmd.ExecuteScalar() as string; 运算符进行投射。

    object temp = cmd.ExecuteScalar();
    if(temp == null)
    {
        //Do something special because no rows where returned
    }
    else if(temp == DbNull.Value)
    {
        //Do something special because the string was NULL in sql
    }
    else
    {
        retvalue = (string)temp;
    }
    

    如果你想要更精细的逻辑,你可以做到这一点

    {{1}}

答案 1 :(得分:0)

由于ExecuteScalar返回object,您必须将其投放到string

retvalue = (string)cmd.ExecuteScalar();

答案 2 :(得分:0)

是的,您需要将其转换为字符串。

执行此操作retvalue = cmdExecuteScalar().ToString()

(或)

施展它。 retvalue = (string)cmd.ExecuteScalar();

ExecuteScalar会向您返回object,您必须通过投射或使用.ToString();

将其转换为字符串

使用cmd.ExecuteScalar() as string;,因为它更强大。不会抛出InvalidCastException而是返回null

答案 3 :(得分:0)

cmd.ExecuteScalar()函数将返回“对象”类型。如果没有显式强制转换,则无法将其分配给任何其他类型。因此,更改以下代码将修复错误

retvalue = Convert.ToString(cmd.ExecuteScalar());

-Ganesh