0

以下のコードを使用して、MS Access データベースにアクセスしています。しかし、Fill: SelectCommand.Connection プロパティが初期化されていませんというエラー メッセージが表示されました。この問題を解決するにはどうすればよいですか。

common.cs
=========
public static bool DBConnectionStatus()
        {
            try
            {
                string conString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|db_admin.mdb; Jet OLEDB:Database Password=admin";
                using (OleDbConnection conn = new OleDbConnection(conString))
                {
                    conn.Open();
                    return (conn.State == ConnectionState.Open);
                }
            }
            catch (OleDbException)
            {
                return false;
            }


protected void btn_general_Click(object sender, EventArgs e)
        {
            try
            {
                bool state = common.DBConnectionStatus();
                if (state == true)
                {
                    cmd = new OleDbCommand("select * from tbl_admin");
                    da = new OleDbDataAdapter(cmd);
                    DataSet ds = new DataSet();

                    da.Fill(ds); // Error Here 
                    if (ds.Tables[0].Rows.Count > 0)
                    {

                    }

                }
            }
            catch (Exception e1)
            {
            }
        }
4

3 に答える 3

0

Commandを構築するために使用する を初期化していますDataAdapterが、両方とも必要なConnectionプロパティを設定していません。

cmd = new OleDbCommand("select * from tbl_admin"); // <-- no connectuion assigned
da = new OleDbDataAdapter(cmd);  // <-- no connectuion assigned

したがって、あなたの例外は一目瞭然です。

最後に 1 つ: usingwill dispose/ closetheconnectionであるため、メソッドDBConnectionStatusは無意味です。したがって、使用しないでください。代わりusingに、最初に in を使用してください。

try
{
    using(var con = new OleDbConnection(connectionString))
    using(var da = new OleDbDataAdapter("elect * from tbl_admin", con))
    {
        var table = new DataTable();
        da.Fill(table); // note that you don't need to open the connection with DataAdapter.Fill
        if (table.Rows.Count > 0)
        {
            // ...
        }
    }
}
catch (Exception e1)
{
    // don't catch an exception if you don't handle it in a useful way(at least loggging)
    throw;
}
于 2013-03-10T13:33:14.380 に答える
0

コードを次のように変更することをお勧めします。

private DataTable YourData()  
{  
    string conString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|db_admin.mdb; Jet OLEDB:Database Password=admin";  
    DataSet ds = new DataSet();  
    using (SqlConnection conn = new SqlConnection(conString))  
    {  
        try  
        {  
            conn.Open();  
            SqlCommand command = new SqlCommand("select * from tbl_admin", conn);  
            command.CommandType = CommandType.Text;  

            SqlDataAdapter adapter = new SqlDataAdapter(command);  
            adapter.Fill(ds);  

            if (ds.Tables[0].Rows.Count > 0)  
            {  
                // do somethign here  
            }  
        }
        catch (Exception)  
        {
            /*Handle error*/  
        }  
    }  
    return ds.Tables[0];  
}  

その後:

protected void btn_general_Click(object sender, EventArgs e)
{          
     this.YourData(); // you will get the Data here. you can then use it the way you want it         
}
于 2013-03-10T12:20:49.253 に答える