【发布时间】:2023-03-30 15:09:01
【问题描述】:
我不知道自己遗漏了什么,但我在为我的 access 数据库插入时不断收到语法错误。这是我正在使用的代码:
string sql = "INSERT INTO Users (FirstName, LastName, BirthDate, Username,
Password) VALUES ('{0}','{1}','{2}','{3}','{4}');";
string sqlF = String.Format(sql, f, l, dob.ToString("MM/dd/yyyy"), u, Encrypt(p));
MessageBox.Show(sqlF);
OleDbConnection conn = DBConn(_BudgetMainDB, _BudgetMainPass);
OleDbCommand cmd = conn.CreateCommand();
conn.Open();
cmd.CommandText = sqlF;
cmd.Connection = conn;
cmd.ExecuteScalar();
这是我的数据库和语法的图像
【问题讨论】:
-
A) 始终使用数据库参数。您的代码将在
O'Brien或D'Artagne之类的名称上失败 B)永远不要将密码存储为纯文本甚至加密 - 对它们进行散列 C)不要将日期存储为文本 - 它们不会像日期一样行事 -
如果你不传入所有的 Values 参数,它是如何工作的?我也将
[Password] and [UserName]包裹在方括号中。cmd.ExecuteScalar() 用于返回1行的Select 语句。您需要在执行以下INSERTS, UPDATES, DELETES时使用cmd.ExecuteNonQuery(),还请阅读如何将您的Sql 对象包装在using() { }构造周围。当前的Sql有缺陷 -
从不。曾经。连接。输入。进入。 SQL。 - 说真的,永远不要那样做;这可能有用:blog.marcgravell.com/2017/12/…
标签: c# ms-access syntax-error oledb