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