我在asp项目中使用了一个类。但是我面临着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>
它产生了这个错误。
答案 0 :(得分:4)
如果您的第一列是varchar
或类似列ExecuteScalar()
,则可能会有效地返回3个不同的内容。
null
,这表示查询返回的行DbNull.Value
,这表示返回的行但sql中的值为NULL
。由于返回的对象可能是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