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

解决方案 »

  1.   

    你使用的是什么数据库,在Sql server下我可以取得。
      

  2.   

    1. try to run the sql statement in the query tool for your database to make sure it is correct2. if you are using sql server, try
    select max(convert(numeric,[test])) from temp
      

  3.   

    also changeOleDbDataReader DbReader = DbCmd.ExecuteReader(); 
    return DbReader.GetString(0).ToString(); ===>
    return DbCmd.ExecuteScalar().ToString(); 
      

  4.   

    我用的sqlserver
    我的test是varchar(20)select max(cast(test as numeric)) from temp我在查询分析器下面可以正常通过得到值
    但是在c#里面执行到下面这句,总是通不过!
    return DbReader.GetString(0).ToString(); 等明天我再试一下思归的方法看看。
      

  5.   

    错误总是发生在不经意之间 :)OleDbDataReader DbReader = DbCmd.ExecuteReader(); 
    if (DbReader.Read())
    return DbReader.GetString(0).ToString(); 
      

  6.   

    string strSelectQuery="select max(convert(numeric,[test])) from temp";
    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())这句在我修改代码的时候不小心给去除了,加上这句后
    然后现在出现了最初的错误:“由于符号不匹配或数据溢出以外的其他原因,未能转换数据值。例如,数据在数据存储区中
    已损坏,但该行仍可以检索。“
      

  7.   

    当我换成思归的方法的时候:
    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类型长度相等,可是依然提示“由于符号不匹配或数据溢出以外的其他原因,未能转换数据值。例如,数据在数据存储区中已损坏,但该行仍可以检索。“
      

  8.   

    修改过来了,由于先有DbReader.Read()所以报错.
    return  DbCmd.ExecuteScalar().ToString();   返回了正确需要的结果谢谢各位的帮助