【问题标题】:SQL Syntax Error On Access DB Insert访问数据库插入时的 SQL 语法错误
【发布时间】: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'BrienD'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


【解决方案1】:

想通了密码是一个保留字,所以我必须把它放在括号里。愚蠢的错误:/

【讨论】:

  • 我并不是要粗鲁,但这只是这里的许多错误之一。一个名为password 的文本列是一个巨大的红旗,上面写着“不!停止!” (并且加密密码不算数 - 这仍然从根本上被破坏) - 在您的插入代码中添加一些 严重 SQL 注入错误,并且您即将泄露您的用户密码。说真的:这是非常危险的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多