Asp 要修复像';无法将类型对象隐式转换为字符串';

Asp 要修复像';无法将类型对象隐式转换为字符串';,asp,c#,asp.net,sql,Asp,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 {

我正在项目中使用一个类。但是我面临着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;
}
cmd.ExecuteScalar()上

它会产生此错误。

因为
ExecuteScalar
返回一个
对象
,您必须将其强制转换为
字符串

retvalue = (string)cmd.ExecuteScalar();

因为
ExecuteScalar
返回一个
对象
,所以必须将其强制转换为
字符串

retvalue = (string)cmd.ExecuteScalar();

是的,你需要把它转换成字符串

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

(或)

投吧<代码>retvalue=(字符串)cmd.ExecuteScalar()

ExecuteScalar
返回
对象
,必须通过强制转换或使用
.ToString()将其转换为字符串


使用
cmd.ExecuteScalar()作为字符串因为它更健壮。不会抛出InvalidCastException,而是返回您需要将其转换为字符串的值

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

(或)

投吧<代码>retvalue=(字符串)cmd.ExecuteScalar()

ExecuteScalar
返回
对象
,必须通过强制转换或使用
.ToString()将其转换为字符串

使用
cmd.ExecuteScalar()作为字符串因为它更健壮。不会抛出
InvalidCastException
,而是返回
null

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

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

cmd.ExecuteScalar()函数将返回“object”类型。在没有显式强制转换的情况下,无法将其分配给任何其他类型。因此,更改下面的代码将修复错误

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

-Ganesh

如果您的第一列是
varchar
或类似列
ExecuteScalar()
可能会返回3种不同的内容

  • 字符串,数据库中的任何值
  • null
    ,这表示查询没有返回任何行
  • DbNull.Value
    ,这表示返回的行在sql中的值为
    NULL
  • 因为返回的对象可以是
    string
    类型,也可以是
    DbNull
    类型,所以它必须返回
    object
    ,因为这是可以容纳这两个对象的最常见类型

    如果您知道查询将始终返回行,并且可能是空的,也可能不是空的,那么您可以使用
    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;
    }
    

    如果您的第一列是
    varchar
    或类似的列
    ExecuteScalar()
    可能会返回3种不同的内容

  • 字符串,数据库中的任何值
  • null
    ,这表示查询没有返回任何行
  • DbNull.Value
    ,这表示返回的行在sql中的值为
    NULL
  • 因为返回的对象可以是
    string
    类型,也可以是
    DbNull
    类型,所以它必须返回
    object
    ,因为这是可以容纳这两个对象的最常见类型

    如果您知道查询将始终返回行,并且可能是空的,也可能不是空的,那么您可以使用
    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;
    }
    

    返回ex.消息听起来很可笑。考虑<代码> GosialError值(“从BLAH BRAH中选择用户名”)< /代码>,它返回“连接不能”或是什么…..?代码>返回ex.消息听起来很可笑。考虑<代码> GosialError值(“从BLAH BRAH中选择用户名”)< /代码>,它返回“连接不能”或是什么…..?如果返回的值在sql中为
    NULL
    ,且强制转换异常无效,则code>(string)cmd.ExecuteScalar()
    将失败
    cmd.ExecuteScalar()作为字符串
    将只返回
    null
    .ToString()
    将返回一个空字符串。@ScottChamberlain,是的。谢谢
    (string)cmd.ExecuteScalar()
    如果在sql中返回的值为
    NULL
    ,且强制转换异常无效,则将失败
    cmd.ExecuteScalar()作为字符串
    将只返回
    null
    .ToString()
    将返回一个空字符串。@ScottChamberlain,是的。谢谢