Asp 要修复像';无法将类型对象隐式转换为字符串';
我正在项目中使用一个类。但是我面临着sql错误 这是一个密码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 {
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());
-Ganeshcmd.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,是的。谢谢