当前位置: 代码迷 >> Sybase >> odbc方式操作sybase奇怪的有关问题(急),能解决者高分重谢(另开贴给分)
  详细解决方案

odbc方式操作sybase奇怪的有关问题(急),能解决者高分重谢(另开贴给分)

热度:10389   发布时间:2013-02-26 00:00:00.0
odbc方式操作sybase奇怪的问题(急!),能解决者高分重谢(另开贴给分)!
C#(asp.net)通过odbc方式连接数据库,连接字符串connString ="Driver={SYBASE SYSTEM 11};Srvr=XX;Uid=XX;Pwd=XX;DB=XX",连接正常. 
执行查询并返回dataset的函数如下: 
public static DataSet OdbcDataSet(string sql, string connString) 
  { 
  OdbcConnection connStr = new OdbcConnection(connString); 
  if (connStr.State.ToString() == "Closed") connStr.Open();  
  OdbcDataAdapter da = new OdbcDataAdapter(sql, connStr); 
  DataSet ds = new DataSet(); 
  ds.Clear(); 
  try 
  { 
  da.Fill(ds);//(1)报错 
  } 
  catch (Exception ex) 
  { 
  da.Fill(ds);//(2)第二次执行正常 
  } 
  finally 
  { 
  da.Dispose(); 
  connStr.Close(); 
  } 
  return ds; 
  }  

每次执行到(1)位置则出错,错误提示如下: 
ERROR [HY000] [INTERSOLV][ODBC SQL Server driver][SQL Server]ct_cursor(CLOSE): user api layer: external error: This type of command cannot be batched with the command already initialized on the command structure. 
再执行(2)位置时却正常,如果用全局连接变量也是如此,刚建立连接时第一次执行查询命令时也报上面同样的错误,以后再执行任何正确语句都正常。 

有谁知道是什么原因?如何解决? 
能解决者高分重谢谢(另开帖给分),讨论皆有分!

------解决方案--------------------------------------------------------
ds.Clear(); 屏蔽掉试一下。没遇到过这种问题
------解决方案--------------------------------------------------------
查询内容是什么?执行其它查询也会出错?
------解决方案--------------------------------------------------------
ase版本多少?与驱动程序是配套的?
------解决方案--------------------------------------------------------
C#我不是太熟悉,但是我想都是面向对象的与java操作方式差不多。
下面给你一个我用java操作sybase的两种连接方式jdbc与jndi,给你提供参照。

Java code
public class DbConnection {    private static String driverName = "com.sybase.jdbc3.jdbc.SybDriver";        private static String url = "jdbc:sybase:Tds:127.0.0.1:5000/project";    private static String user = "sa";    private static String password = "";    private static String jdbcJNDI = "java:comp/env/jdbc/pro";        public DbConnection(){            }        public static Connection getConnection1() throws SQLException{        try {            Context ctx = new InitialContext();            DataSource ds = (DataSource) ctx.lookup(jdbcJNDI);            return ds.getConnection();        }        catch (Exception ex) {            ex.printStackTrace();            throw new SQLException(ex.getMessage());        }    }        public static Connection getConnection() throws SQLException{        try {            Class.forName(driverName);            return DriverManager.getConnection(url, user, password);        }         catch (Exception ex) {            ex.printStackTrace();            throw new SQLException(ex.getMessage());        }            }        public static ResultSet select(String sql) throws SQLException{        ResultSet rs = null;        Connection conn = null;        try {            conn = getConnection();            Statement stmt = conn.createStatement();            rs = stmt.executeQuery(sql);                    } catch (SQLException e) {            System.out.println("查询异常:" + e.getMessage());        }        finally{            if(conn != null){                conn.close();            }        }        return rs;    }}
------解决方案--------------------------------------------------------
,刚连接每一次会那样的错:
  相关解决方案