【问题标题】:problem inserting data into database using sql command使用sql命令将数据插入数据库的问题
【发布时间】:2019-10-10 00:17:28
【问题描述】:

我收到以下错误:

INSERT INTO 语句中的语法错误。

我似乎无法找到错误。这是代码:

if (Request["su"] == "save")
{
     string sqlCommand = "";
     string fileName = "UsersDB.accdb";
     string tableName = "Table 2";
     string website_name, website_psw;
     website_name = Request["psw_name"];
     website_psw = Request["psw"];

     sqlCommand = "INSERT INTO " + tableName + " (fname, lname, umail, upassword, gender, age, uid) ";
     sqlCommand += "VALUES ('"+0+ "','" + Session["umail"].ToString() + "','" + website_psw + "','" + website_name +  "')";
     MyAdoHelper.DoQuery(fileName, sqlCommand);
}

对于数据库,它有 4 行:

uid, uidd, psw_name, psw

导致此类错误的代码中的问题是什么?

【问题讨论】:

  • 您确定该表称为“表 2”吗?我几乎可以肯定,当您引用这样的表时,sql 查询中不能有空格。如果是,请尝试添加方括号,例如“INSERT INTO [” tableName + “] ...”
  • 您查询插入问题,因为您的表有 7 列,并且您仅传递 4 列的值
  • 也发布实际错误。这有助于我们不要猜测它可能是什么。
  • 但是查询中最重要的问题是您允许在数据库上发生的 SQL 注入免费方
  • 还有一个强制性的“使用 ORM,如 Entity Framework 或 nHibernate,而不是尝试在代码中构建 SQL 语句”

标签: c# sql asp.net database


【解决方案1】:

您的 INSERT 语句似乎指定要插入 7 列(fname、lname、umail、uppassword、gender、age、uid)并且只有 4 列数据。

其中带有空格的表名也可能会导致问题。将其括在方括号中应该可以解决该问题。

您的 SQL 应该这样开始(如果此文本:“它有 4 行:uid、uidd、psw_name、psw”表示您的表有 4 列):

INSERT INTO [表 2] (uid, uidd, psw_name, psw) VALUES (...

【讨论】:

  • 是的,但这不是“语法错误”消息的来源
  • 好点。可能是带有空格的表名,没有方括号或类似的语法错误。
【解决方案2】:

试试这两行:

sqlCommand = "INSERT INTO " + tableName + " (fname, lname, umail, upassword, gender, 
 age, uid) ";
sqlCommand += "VALUES (\'"+0+ "\',\'" + Session["umail"].ToString() + "\',\'" + 
website_psw + "\',\'" + website_name +  "\')";

【讨论】:

  • 首先,这个答案重复了错误,在预期 7 时只插入 4 个值,其次在 C# 或 MS-Access 中都不需要转义单引号,第三个带有空格的表名是语法错误的原因(或某些包含单引号的值)
猜你喜欢
  • 1970-01-01
  • 2014-01-29
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 2011-09-06
  • 2017-08-20
相关资源
最近更新 更多