现在自定义一个方法,其主要功能是对数据库执行一个SQL查询,并将查询结果放到DataSet中返回,函数如下:// 执行一个sql[Select]语句将结果返回dataset
// tblName 是要填充到DataSet中的表名
public static DataSet ExecuteSqlForDataSet(string strSql,string tblName)
  {
    strSql = FilterSQL(strSql);
    SqlConnection MyConn = new SqlConnection(GetSqlConnString());
    try
      {
        MyConn.Open();
        SqlDataAdapter MyAdapter = new SqlDataAdapter(strSql,MyConn);
        DataSet ds = new DataSet();
        MyAdapter.Fill(ds,tblName);
        MyAdapter.Dispose();
        MyConn.Close();
        return ds;
      }
    catch(System.Data.SqlClient.SqlException e)
      {
        throw new Exception(e.Message);
      }
    finally
      {
        MyConn.Close();
      }
}
现在有如下三条SQL语句:
strSQL_A = "Select n_cataid as s_cata_title,LEFT(s_title,10) as s_title,t_content From News order by n_cataid Desc";strSQL_B = "Select cata.s_title as s_cata_title,LEFT(News.s_title,10) as s_title,news.t_content From News,cata where news.n_cataid=cata.id order by cata.id Desc";strSQL_C = "Select cata.s_title as s_cata_title,LEFT(News.s_title,10) as s_title,news.t_content From News inner join cata on news.n_cataid=cata.id order by cata.id Desc";将它分别放到SQL Server查询分析器里都可以正确执行,但我把它放到asp.net(c#)代码中,调用如上ExecuteSqlForDataSet()方法执行,只有strSQL_A这条语句能执行,其它两条都不可以.
出现这样一个错误提示:异常详细信息: System.Exception: 在关键字 'order' 附近有语法错误。我找了很多资料,都没有找到答案,还请高手指点!小弟谢了~!

解决方案 »

  1.   

    finally
          {
            MyConn.Close();
          }
    这句并不合理,最好是判断一下,MyConn是否打开的,否则将可以抛出另外的异常。
    对于SQL不能查询的原因,你自己在企业管理器中试试,成功的情况下使用你自己定义的函数。
      

  2.   

    Select cata.s_title -----> Select cata.id, cata.s_title
      

  3.   

    to begincsdn(CNetware)以上三条语句在企业管理器的查询分析器里都可以执行,但将它们分别放到我的函数中时,只有SQL_A这条SQL语句可以执行,其它两条(SQL_B和SQL_C)就不可以了。出现这样一个错误提示:异常详细信息: System.Exception: 在关键字 'order' 附近有语法错误。可是我找不出来SQL_B和SQL_C这两条SQL语句哪有错了!~
      

  4.   

    最新进展:
    以上三条SQL语句,若将SQL_B和SQL_C中条件比较换成大于(>)或小于(<)的话,在查询分析器里和函数里都可以执行,换成等于(=)就出现楼主所说情况。
      

  5.   

    单步调试,执行查询前看strSql的值,
      

  6.   

    你实验下:
    n_cataid as s_cata_title,
    strSQL_B = "Select cata.id as s_cata_title,LEFT(News.s_title,10) as s_title,news.t_content From News,cata where news.n_cataid=cata.id order by cata.id Desc";strSQL_C = "Select cata.id as s_cata_title,LEFT(News.s_title,10) as s_title,news.t_content From News inner join cata on news.n_cataid=cata.id order by cata.id Desc";
      

  7.   

    FilterSQL(sqlText)有没有对"="的转换,或者取代
      

  8.   

    有可能是FilterSQL方法有问题。你试打印出经过这个访求处理之后的sql语句。