strSelectQuery="select max(cast(test as int)) from temp"这句化能在sql analysis中通过吗
?use pubs
select max(cast(zip as int)) from authors
zip is varchar (5)
this sentence i can execute successful
?use pubs
select max(cast(zip as int)) from authors
zip is varchar (5)
this sentence i can execute successful
select max(convert(numeric,[test])) from temp
return DbReader.GetString(0).ToString(); ===>
return DbCmd.ExecuteScalar().ToString();
我的test是varchar(20)select max(cast(test as numeric)) from temp我在查询分析器下面可以正常通过得到值
但是在c#里面执行到下面这句,总是通不过!
return DbReader.GetString(0).ToString(); 等明天我再试一下思归的方法看看。
if (DbReader.Read())
return DbReader.GetString(0).ToString();
OleDbConnection DbConn=new OleDbConnection(strConn);
OleDbCommand DbCmd=new OleDbCommand(strSelectQuery,DbConn);
DbCmd.Connection.Open();
OleDbDataReader DbReader = DbCmd.ExecuteReader();
if (DbReader.Read())
{
try
{
return DbReader.GetString(0).ToString();
}
catch(Exception err)
{
return err.Message.ToString();
}
}
else
{
return "false";
}temp表中的内容如下
id test
1 45
2 56576
3 52
4 7667 test是varchar(20)
if (DbReader.Read())这句在我修改代码的时候不小心给去除了,加上这句后
然后现在出现了最初的错误:“由于符号不匹配或数据溢出以外的其他原因,未能转换数据值。例如,数据在数据存储区中
已损坏,但该行仍可以检索。“
return DbCmd.ExecuteScalar().ToString();
错误提示:“ExecuteScalar 需要打开的并且可用的连接。该连接的当前状态是 Open, Fetching。“
即使改动sql语句:
string strSelectQuery="select count(*) as temps from z_temp";
也没有效果,我的DbConn很明显是open的,而且更换后sql语句也是返回聚合结果的。
无论是select count(*) as temps from z_temp还是
select max(cast(test as numeric)) from temp或者
select max(convert(numeric,[test])) from temp都可以在查询分析器里面正常通过并返回正确结果。放到程序里面编译的时候就通不过,将数据库中的test字段改成varchar(9),和numeric类型长度相等,可是依然提示“由于符号不匹配或数据溢出以外的其他原因,未能转换数据值。例如,数据在数据存储区中已损坏,但该行仍可以检索。“
return DbCmd.ExecuteScalar().ToString(); 返回了正确需要的结果谢谢各位的帮助