Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;INSERT INTO语句“中存在语法错误”;。为什么?_C#_Database - Fatal编程技术网

C# &引用;INSERT INTO语句“中存在语法错误”;。为什么?

C# &引用;INSERT INTO语句“中存在语法错误”;。为什么?,c#,database,C#,Database,我的代码如下。我有一种方法,我传入三个参数,然后将它们写入MS Access数据库表。但是,我一直收到一条语法错误消息。谁能告诉我为什么?我从网上得到了这个例子 private static void insertRecord(string day, int hour, int loadKW) { string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\LoadForec

我的代码如下。我有一种方法,我传入三个参数,然后将它们写入MS Access数据库表。但是,我一直收到一条语法错误消息。谁能告诉我为什么?我从网上得到了这个例子

        private static void insertRecord(string day, int hour, int loadKW)
    {
        string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\LoadForecastDB.accdb";
        OleDbConnection conn = new OleDbConnection(connString);

        string ins = @"INSERT INTO Forecasts (Day, Hour, Load) VALUES (?,?,?)";

        OleDbCommand cmd = new OleDbCommand(ins, conn);

        cmd.Parameters.Add("@day", OleDbType.VarChar).Value = day;
        cmd.Parameters.Add("@hour", OleDbType.Integer).Value = hour;
        cmd.Parameters.Add("@load", OleDbType.Integer).Value = loadKW;

        conn.Open();

        try
        {
            int count = cmd.ExecuteNonQuery();
        }
        catch (OleDbException ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            conn.Close();
        }
    }
试着改变

string ins = @"INSERT INTO Forecasts (Day, Hour, Load) VALUES (?,?,?)"; 
致:


我想这可能是因为你的列名(天和小时)也是关键字。也许你可以在它们周围加上`(倒单引号)(在MySQL中有效,不知道MS Access)

另一个选项可能是用数字引用绑定变量:

    cmd.Parameters.Add(1, OleDbType.VarChar).Value = day;
    cmd.Parameters.Add(2, OleDbType.Integer).Value = hour;
    cmd.Parameters.Add(3, OleDbType.Integer).Value = loadKW;

注意:我不知道C#,但类似的方法适用于Java和JDBC。

在编译时或执行时是否会出现语法错误?你能提供更多关于错误的信息吗?我在执行时得到错误。谢谢谢谢,Juha,我会看看这是否有区别。我认为OLE DB参数需要
,而不是前缀名称。好主意!我现在就换一下,看看会发生什么。非常感谢。是的,我确实读过OLE DB parms要求的地方?而不是“命名”帕尔姆。但是,在这一点上,我将尝试任何方法。@wRAR您可能是对的,但是我在某个地方读到您可以使用命名参数。我回答的另一点是避开名称、日期、小时和负载(使用[])。嗯。天和小时是关键词,嗯?这可能是我问题的根源。我将更改文件中的字段名,并更改我的“插入”,然后看看会发生什么。谢谢我正在重新考虑,可能它们不是关键词,但这是我能想到的第一件事。值得一试,让我知道发生了什么。你是对的!我将文件和程序中的Day和Hour更改为ForecastDay和ForecastHour,然后重新运行程序。它工作得很好!好眼力!非常感谢!
    cmd.Parameters.Add(1, OleDbType.VarChar).Value = day;
    cmd.Parameters.Add(2, OleDbType.Integer).Value = hour;
    cmd.Parameters.Add(3, OleDbType.Integer).Value = loadKW;