C#-Access数据库:为什么SELECT*FROM表不起作用

本文关键字:FROM 不起作用 SELECT 数据库 为什么 C#-Access | 更新日期: 2023-09-27 17:57:27

一个简单的"select*fromtablename"sql查询适用于名为"mode"的表,但不适用于名"user"的表。为什么?

两个表都有2列。如果我使用"mySQL"变量作为"SELECT*FROM模式"运行程序,它可以正常工作。如果我放用户表,这意味着mySQL将是"SELECT*FROM user",那么它会引发一个异常,上面写着"FROM子句中的语法错误"。这怎么可能呢?

这是代码:

static void Main(string[] args)
    {
        String connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Accounts.mdb";
        OleDbConnection conn;
        conn = new OleDbConnection(connectionstring);
        try
        {
            conn.Open();
        }
        catch (Exception)
        {
            Console.Write("Could not connect to database");
        }
        String mySQL = "SELECT * FROM user";
        OleDbCommand cmd = new OleDbCommand(mySQL, conn);
        OleDbDataReader rdr = cmd.ExecuteReader();
        while (rdr.Read())
        {
            Console.Write(String.Format("{0}'n,{1}'n", rdr.GetValue(0).ToString(), rdr.GetValue(1).ToString()));
        }
        Console.Read();
    }

C#-Access数据库:为什么SELECT*FROM表不起作用

因为USER是MS Access 中的保留字

更改查询以将其封装在方形制动器之间

SELECT * FROM [User]

尽管我建议您更改表的名称

照Steve说的做。还有一个关于你的代码的建议:

        String connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0; Data    Source=Accounts.mdb";
        OleDbConnection conn = null;
        OleDbCommand cmd = null;
        OleDbDataReader rdr = null;
        String mySQL = "SELECT * FROM [user]";
        try
        {
            conn = new OleDbConnection(connectionstring);
            conn.Open();

            cmd = new OleDbCommand(mySQL, conn);
            rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                Console.Write(String.Format("{0}'n,{1}'n", rdr.GetValue(0).ToString(), rdr.GetValue(1).ToString()));
            }
            Console.Read();
            conn.Close();
        }
        catch (Exception ex)
        {
            Console.Error.Write("Error founded: " + ex.Message);
        }
        finally
        {
            if (conn != null) conn.Dispose();
            if (cmd != null) cmd.Dispose();
            if (rdr != null) rdr.Dispose();
        }