0

这是我编写的代码,用于在单击按钮时向手风琴窗格添加一些文本:

protected void Button1_Click1(object sender, EventArgs e)
    {
        //Use a string variable to hold the ConnectionString.
        string connectString = "Provider=Microsoft.Jet.OLEDB.4.0;"
            + "Data Source=D:\\C#Samples\\StudentDetails\\WebRole1\\App_Data\\Students1.accdb";
        System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection();
        cn.ConnectionString = connectString;
        //Create an OleDbConnection object, and then pass in the ConnectionString to the constructor.
        //OleDbConnection cn = new OleDbConnection(ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString);
        try
        {
            //Open the connection.
            cn.Open();
        }
        catch (Exception ex)
        {
            AccordionPane1.Controls.Add(new LiteralControl("Open Error"));
        }

            string selectString = "SELECT * FROM BasicInfo";

            //Create an OleDbCommand object.
            //Notice that this line passes in the SQL statement and the OleDbConnection object
            OleDbCommand cmd = new OleDbCommand(selectString, cn);

            //Send the CommandText to the connection, and then build an OleDbDataReader.
            //Note: The OleDbDataReader is forward-only.

            try
            {
                OleDbDataReader reader=null;
                try
                {
                    reader = cmd.ExecuteReader();
                }
                catch (Exception es)
                {
                    AccordionPane1.Controls.Add(new LiteralControl(" datareader"));
                }
                string s = "s";
                reader.Read();
                s = reader["S_No"].ToString();

                AccordionPane1.Controls.Add(new LiteralControl(s));
                //Close the reader and the related connection.
                reader.Close();
                cn.Close();
            }
            catch (Exception ex)
            {
                AccordionPane1.Controls.Add(new LiteralControl(" Read Error"));
            }
    }

我在 connectString 中指定的文件夹中有我的 access 2007 数据库。当我在浏览器中查看时,单击按钮我得到了所有三个例外: 在此处输入图像描述

打开数据库可能会出现什么问题?我是否需要进行任何其他更改?

4

3 回答 3

2

改变

提供者=Microsoft.Jet.OLEDB.4.0;

提供者=Microsoft.ACE.OLEDB.12.0

Provider=Microsoft.ACE.OLEDB.12.0;"
            + "Data Source=D:\\C#Samples\\StudentDetails\\WebRole1\\App_Data\\Students1.accdb

希望它能解决问题。

于 2012-08-17T14:22:16.570 回答
1

您的连接字符串可能是问题的原因

string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\abc.mdb;";

OleDbConnection MyConn = new OleDbConnection(ConnStr);

对于访问 2007还检查数据库的路径是否正确。

于 2012-08-17T14:22:53.603 回答
1

您可以使用|DataDirectory| 代替real path并且必须更改Provider=Microsoft.ACE.OLEDB.12.0(如@MMK 所建议)

 string connectString = @"Microsoft.ACE.OLEDB.12.0;
       Data Source=|DataDirectory|\Students1.accdb;Persist Security Info=False;";

并始终使用正确using处理IDisposable对象的块。

using(OleDbConnection cn=new OleDbConnection())
{
 using(OleDbCommand cmd=new OleDbCommand())
 {
  cn.ConnectionString=connectionString;
  cmd.CommandText=selectString;
  cmd.Connection=cn;
  ...
 }
}
于 2012-08-17T14:24:57.950 回答