当前位置: 首页 > 知识库问答 >
问题:

Insert语句中的语法不正确

王航
2023-03-14

打开和关闭连接:

OleDbConnection conn;
private void ConnectToDatabase()
{
    // Creates a connection to the database using an absolute path.
    conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +Server.MapPath("App_Data\\BookRatings.accdb"));
    // Opens the connection.
    conn.Open();
}
private void DisconnectDatabase()
{
    // The connection is closed.
    conn.Close();
}

注册用户

 public void RegisterCustomer(string userName, string Address, string Tel, string Email, string Ques, string Ans, string Pass)
{
    // Connect to database.
    ConnectToDatabase();
    // Inserts the necessary values into the database.
    OleDbCommand cmd = conn.CreateCommand();
    cmd.CommandText = (@"INSERT INTO user ([userName], [Address],[telephone], [emailAddress], [Password], [securityQuestion], [securityAnswer]) VALUES ('" + userName + "', '" + Address + "', '" + Tel + "', '" + Email + "', '" + Pass + "', '" + Ques + "', '" + Ans + "')");
    cmd.ExecuteNonQuery();
    // The connection is closed.
    DisconnectDatabase();
}

错误消息

'/'应用程序中的服务器错误。

INSERT INTO语句中存在语法错误。

描述:在执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的起源的更多信息。

异常详细信息:系统。数据。OleDb。OleDbException:INSERT INTO语句中的语法错误。

源错误:

第100行:命令。ExecuteNonQuery();第101行://连接已关闭。第102行:DisconnectDatabase();第103行:}104行:[WebMethod]

源文件:*\bookClub\Service。aspx。cs线:102

堆栈跟踪:

[OleDbException(0x80040e14):INSERT INTO语句中的语法错误。]系统数据OleDb。OLEDB命令。执行命令和文本错误处理(OleDbHResult hr)1102900系统。数据OleDb。OLEDB命令。ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object

我不明白为什么这么近的距离会产生问题?或者为什么它会在插入时崩溃。。。

共有1个答案

姜明贤
2023-03-14

用户是MS Access中的保留字,因此只需更新SQL命令,将用户包装在方括号中:

cmd.CommandText = (@"INSERT INTO [user] ([userName]....

此外,如注释中所述,最好使用参数化查询来防止SQL注入攻击。

看看这个问题的答案,它向你展示了如何做到这一点:

此外,在该示例中,它使用一个Using块来处理关闭和处理连接,这比手动操作要好。您的代码看起来像这样,带有参数和使用块的代码:

conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +Server.MapPath("App_Data\\BookRatings.accdb"));
conn.Open();

// DbCommand also implements IDisposable
using (OleDbCommand cmd = conn.CreateCommand())
{
   // create command with parameter placeholders
   cmd.CommandText = 
        @"INSERT INTO [user] ([userName], [Address],[telephone]....) " +
         "VALUES (@username, @address, @telephone,....)");

   // add named parameters
   cmd.Parameters.AddRange(new OleDbParameter[]
   {
        new OleDbParameter("@userName", userName),
        new OleDbParameter("@address", Address),
        new OleDbParameter("@telephone", Tel),
        ...
    };

    // execute
    cmd.ExecuteNonQuery();
}
 类似资料:
  • 问题内容: 我知道很多人偶尔也会遇到相同的错误,但是我已经查看了所有先前的答案和我的代码,并且尝试了使用col和不使用反引号。这是我目前尝试使用的代码,但同样 该表中还有其他列,但是只有上面的我想为其余部分添加数据的列可以最初使用默认值 我一直在看这段代码很久了,现在我才发现问题,我知道这很愚蠢 问题答案: 将变量添加到SQL查询中的最防错的方法是通过 准备好的语句 添加变量。 因此,对于您运行的

  • 主要内容:1.不指定列名,2.通过指定列名称SQL INSERT语句用于在表中插入单个或多个数据。 在SQL中,可以通过以下两种方式插入数据: 不指定列名称 通过指定列名称 假设有一个表: 的结构和数据记录如下 - EMP_ID EMP_NAME CITY SALARY AGE 1 Angelina Chicago 200000 30 2 Robert Austin 300000 26 3 Christian Denver 100000 4

  • 主要内容:语法,实例,使用一个表来填充另一个表SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行。 语法 INSERT INTO 语句有两种基本语法,如下所示: 在这里,column1, column2,...columnN 是要插入数据的表中的列的名称。 如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。SQLite 的 INSERT INTO

  • 本文向大家介绍正确使用MySQL INSERT INTO语句,包括了正确使用MySQL INSERT INTO语句的使用技巧和注意事项,需要的朋友参考一下 以下的文章主要介绍的是MySQL INSERT INTO语句的实际用法以及MySQL INSERT INTO语句中的相关语句的介绍,MySQL INSERT INTO语句在实际应用中是经常使用到的语句,所以对其相关的内容还是多多掌握为好。 My

  • 在 T-SQL 中,INSERT 语句用于向表中添加新行。 INSERT INTO SELECT 需要源中的数据类型,目标匹配表。 表中的现有记录不受 INSERT 语句的影响。 语法: 以下是 的两种语法。 第一种语法: 其中 是表中的列名。 当为列添加值时,无法在 SQL 查询中指定列名。值的顺序与下面指定的顺序相同。 INSERT 语句的语法,第二种语法如下: 例子: 以下语句将在 CUST

  • INSERT INTO 语句用于向表中插入新记录。 SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录。 SQL INSERT INTO 语法 INSERT INTO 语句可以有两种编写形式。 第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:INSERT INTO table_name VALUES (NULL,value2,value3,...);