Ms Access + C#连接到数据库

时间:2014-04-12 15:46:38

标签: c# ms-access

using System;
using System.Data;
using System.Data.OleDb;

class AccessConnectPureCode
{
    public static void Main()
    {
        string connectionString = @"provider=Microsoft.Jet.OLEDB.4.0; data source=C:\Users\AAAAA\Documents\Users.mdb";
        OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);
        OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();
        myOleDbCommand.CommandText = "SELECT * FROM User";
        myOleDbConnection.Open();

        // Считываем данные
        OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader();
        while (myOleDbDataReader.Read())
        {
            Console.WriteLine(string.Format("Login: {0}, Mail: {1}, Pasword: {2}",
            myOleDbDataReader["Login"],
            myOleDbDataReader["Mail"],
            myOleDbDataReader["Password"]));
        }
        myOleDbDataReader.Close();
        }
}

这是我的代码,我需要将mdb文件连接到C#控制台应用程序,但这里

 myOleDbCommand.CommandText = "SELECT * FROM User";

我得到了一个例外

  

未处理的类型' System.Data.OleDb.OleDbException'发生在System.Data.dll

中      

其他信息:FROM子句中的语法错误。

我在User

中的表Users.mdb中列出了所有这些列

如何从该表中读取字段?

4 个答案:

答案 0 :(得分:5)

尝试

myOleDbCommand.CommandText = "SELECT * FROM [User]";

在这种情况下,用户可能是保留字。

答案 1 :(得分:2)

User是MS Access中的reserved word。您应该使用方括号,如[USER]

myOleDbCommand.CommandText = "SELECT * FROM [User]";

作为一般推荐,请勿在数据库中使用保留关键字作为标识符和对象名称。

  

如果已使用保留字,则可以避免出现错误消息   用括号([])围绕每个单词的出现。然而,   最好的解决方案是将名称更改为非保留字。

还可以使用using statement来处理您的OleDbConnectionOleDbCommandOleDbDataReader之类的内容;

using(var myOleDbConnection = new OleDbConnection(connectionString))
using(var myOleDbCommand = myOleDbConnection.CreateCommand())
{
   ...
   ...
   using(var myOleDbDataReader = myOleDbCommand.ExecuteReader())
   {
      ...
   }
}

答案 2 :(得分:1)

UserTSQL中的保留关键字,请参阅documentation

您需要使用方括号来逃避它。

"SELECT * FROM [User]";

答案 3 :(得分:1)

user是SQL语法中的关键字,您应该使用[user]

以下是我之前项目代码的一部分:

string strconnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=bank.mdb";

    public void InsertMethod(string inputt, string runningtimee, string kindd)
    {
        try
        {
            OleDbConnection objconnection = new OleDbConnection(strconnection);
            OleDbCommand cmd = new OleDbCommand();
            OleDbCommand objcommand = new OleDbCommand("INSERT INTO Table1" +
                "(db_account_number,db_name,db_family) " +
                "VALUES(@txtaccount,@txtname, @txtfamily)", objconnection);
            objcommand.Parameters.AddWithValue("@db_account_number", runningtimee);
            objcommand.Parameters.AddWithValue("@db_name", kindd);
            objcommand.Parameters.AddWithValue("@db_family", inputt);
            objconnection.Open();
            objcommand.ExecuteNonQuery();
            objconnection.Close();
        }
        catch (OleDbException a)
        {
            MessageBox.Show(a.ToString());
        }