【问题标题】:MsAccess + C# connect to databaseMsAccess + C# 连接数据库
【发布时间】:2016-07-18 14:09:40
【问题描述】:
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.dll 中出现“System.Data.OleDb.OleDbException”类型的未处理异常

附加信息:FROM 子句中的语法错误。

Users.mdbUser 表中有所有这些列

如何从该表中读取字段?

【问题讨论】:

    标签: c# ms-access


    【解决方案1】:

    试试

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

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

    【讨论】:

      【解决方案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())
         {
            ...
         }
      }
      

      【讨论】:

        【解决方案3】:

        UserTSQL 中的一个保留关键字,参见documentation

        你需要使用方括号来转义它。

        "SELECT * FROM [User]";
        

        【讨论】:

        • 额外信息会有所帮助。所有这些不同的 SQL 引擎 - 每个都有自己的。我主要在 MSSQL 中工作,所以我不确定/不记得了..
        • 这是为 MS Access SQL - 而不是 T-SQL(在 SQL Server 中)
        【解决方案4】:

        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());
                }
        

        【讨论】:

          猜你喜欢
          • 2013-08-05
          • 1970-01-01
          • 2011-09-15
          • 1970-01-01
          • 2018-03-04
          • 1970-01-01
          • 2016-10-03
          • 2013-05-11
          相关资源
          最近更新 更多