C# 使用C时发生SQL插入语法错误

C# 使用C时发生SQL插入语法错误,c#,sql,ms-access-2013,C#,Sql,Ms Access 2013,我使用C将信息从一个Access DB传输到另一个Access DB。使用以下代码会生成错误,但通过使用相同的值将查询置于Access中,我不会得到错误。有人知道发生了什么事吗 string sqlInfaction = "INSERT INTO AquiredInfractions" + "(AgentID, DateID, InfractionID, STime, Durration, Exception) " +

我使用C将信息从一个Access DB传输到另一个Access DB。使用以下代码会生成错误,但通过使用相同的值将查询置于Access中,我不会得到错误。有人知道发生了什么事吗

    string sqlInfaction = "INSERT INTO AquiredInfractions" +
                                "(AgentID, DateID, InfractionID, STime, Durration, Exception) " +
                            "SELECT " +
                                "@ID AS AgentID, (SELECT D.DateID FROM DateCodes AS D WHERE D.DateValue = @DT) AS DateID, " +
                                "I.InfractionID, @ST AS STime, @DR AS Durration, @E AS Exception " +
                            "FROM " +
                                "InfractionTypes AS I " +
                                    "INNER JOIN " +
                                "Groupings AS G " +
                                    "ON I.GroupingID = G.GroupingID " +
                            "WHERE " +
                                "G.GroupingTitle = @NAME " +
                                "AND " +
                                "I.MinDur <= @DR1 AND I.MaxDur >= @DR2;";

    OleDbCommand InfCmd = null;
在传递函数中:

            InfCmd.Parameters["@ID"].Value = inf.AgentID;
            InfCmd.Parameters["@DT"].Value = inf.date;
            InfCmd.Parameters["@ST"].Value = inf.startTime;
            InfCmd.Parameters["@DR"].Value = inf.durration;
            InfCmd.Parameters["@E"].Value = inf.exception;
            InfCmd.Parameters["@NAME"].Value = inf.infract;
            InfCmd.Parameters["@DR1"].Value = inf.durration;
            InfCmd.Parameters["@DR2"].Value = inf.durration;

            InfCmd.ExecuteNonQuery();
在测试中,我逐步完成了正在运行的代码,使用放入上述参数中的值在Access中测试查询

通过quickwatch查看sqlInfaction的值:

        sqlInfaction    "INSERT INTO AquiredInfractions(AgentID, DateID, InfractionID, STime, Durration, Exception) 
                  SELECT @ID AS AgentID, (SELECT D.DateID FROM DateCodes AS D WHERE D.DateValue = @DT) AS DateID, 
                  I.InfractionID, @ST AS STime, @DR AS Durration, @E AS Exception FROM InfractionTypes AS I 
                  INNER JOIN Groupings AS G ON I.GroupingID = G.GroupingID WHERE G.GroupingTitle = @NAME 
                  AND I.MinDur <= @DR1 AND I.MaxDur >= @DR2;"   string

如果抛出的异常中有特定的内容,请告诉我,但这就是全部消息。

在玩过之后,我发现异常周围缺少答案[]。正确的查询如下:

    string sqlInfaction = "INSERT INTO AquiredInfractions" +
                            "(AgentID, DateID, InfractionID, STime, Durration, [Exception]) " +
                        "SELECT " +
                            "@ID AS AgentID, (SELECT D.DateID FROM DateCodes AS D WHERE D.DateValue = @DT) AS DateID, " +
                            "I.InfractionID, @ST AS STime, @DR AS Durration, @E AS [Exception] " +
                        "FROM " +
                            "InfractionTypes AS I " +
                                "INNER JOIN " +
                            "Groupings AS G " +
                                "ON I.GroupingID = G.GroupingID " +
                        "WHERE " +
                            "G.GroupingTitle = @NAME " +
                            "AND " +
                            "I.MinDur <= @DR1 AND I.MaxDur >= @DR2;";

您收到的确切错误消息是什么?它是System.Data.OleDb.OLEDBEException,消息为“INSERT INTO语句中的语法错误”。请编辑您的问题并添加完整和准确的异常消息。
Message: Syntax error in INSERT INTO statement.
Error Code: -2147217900
    string sqlInfaction = "INSERT INTO AquiredInfractions" +
                            "(AgentID, DateID, InfractionID, STime, Durration, [Exception]) " +
                        "SELECT " +
                            "@ID AS AgentID, (SELECT D.DateID FROM DateCodes AS D WHERE D.DateValue = @DT) AS DateID, " +
                            "I.InfractionID, @ST AS STime, @DR AS Durration, @E AS [Exception] " +
                        "FROM " +
                            "InfractionTypes AS I " +
                                "INNER JOIN " +
                            "Groupings AS G " +
                                "ON I.GroupingID = G.GroupingID " +
                        "WHERE " +
                            "G.GroupingTitle = @NAME " +
                            "AND " +
                            "I.MinDur <= @DR1 AND I.MaxDur >= @DR2;";