执行到return ds.Tables[0];语句后就转向catch了!这是为什么呀?using System;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;namespace Data
{
/// <summary>
/// Data 的摘要说明。
/// </summary>
public class Data  
{
private static string constr = "provider=Microsoft.Jet.OLEDB.4.0;"+"data source=Data_WAS.mdb"; 
static OleDbConnection con=new OleDbConnection(constr); 

public static DataTable SelectAll(string tableName) 
{
string ole = "select * from "+tableName;
OleDbDataAdapter sda = new OleDbDataAdapter (ole,con);
DataSet ds = new DataSet();
     try
 {

 sda.Fill(ds);
     return ds.Tables[0];
     
 }
     
 catch
 {

       MessageBox.Show("查询的数据库不存在","查询错误");
     if(con!=null)
 {
                         
    if (con.State !=ConnectionState.Closed)
con.Close();
         }
     sda.Dispose();
     return null;
     }


}
}

解决方案 »

  1.   

    实际上是在Fill的时候出了问题.建议楼主将catch语句改为 
    Catch( Exception e )
    {
        MessageBox.Show( e.Message );
        //........
    }
    这样就很清楚发生什么错误了
      

  2.   

    我检查过了,TableName没有错?
      

  3.   

    tableName你传进去的对吗?数据库中存在吗 你应改单步执行看看SQL语句
      

  4.   

    static dataset  return dataset; 你先改成返回这个类型! 然后DataSet ds = SelectAll(tableName) ;ds.tables[0];  看看这里出错吗??????
      

  5.   

    实际上是在Fill的时候出了问题.建议楼主将catch语句改为
    Catch( Exception e )
    {
    MessageBox.Show( e.Message );
    //........
    }
    这样就很清楚发生什么错误了
    ************************************************比较可能的是没有表,或者数据库连接不可用。楼主实在应该用上面的方法看一下,提高效率避免瞎猜。
      

  6.   

    直观的感觉是 少了con.Open()