0

嘿伙计们,这是我的代码,我从 VS 获得的唯一帮助是 INSERT INTO 语句语法不正确?

我已经浏览了所有代码,但看不到我哪里出错了,有人可以帮帮忙吗?

        public void New(string ApplicationStartupPath, string FileName, string Department, string Month, string Year)
    {
        string sql = "INSERT INTO PodcastsDir (FileName, Department, Month, Year) VALUES (@FileName, @Department, @Month, @Year)";
        using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + ApplicationStartupPath.ToString() + ""))
        using (OleDbCommand cmd = new OleDbCommand(sql, conn))
        {
            cmd.Parameters.Add("@FileName", OleDbType.VarChar);
            cmd.Parameters.Add("@Department", OleDbType.VarChar);
            cmd.Parameters.Add("@Month", OleDbType.VarChar);
            cmd.Parameters.Add("@Year", OleDbType.VarChar);

            conn.Open();

            cmd.Parameters[0].Value = FileName;
            cmd.Parameters[1].Value = Department;
            cmd.Parameters[2].Value = Month;
            cmd.Parameters[3].Value = Year;

            cmd.ExecuteNonQuery();
        }

    }

谢谢灰

4

4 回答 4

2

您似乎正在使用 Access - 不是 Month 和 Year 保留字吗?尝试将它们括在方括号中(这是 Access 的正确分隔符吗?),然后重试。

于 2009-07-11T16:57:53.237 回答
1

如果您使用的是 Access,则参数实际上不是占位符,而不是命名参数。

更改您的 SQL 字符串以使用?作为占位符而不是命名参数,并确保以与 ? 相同的顺序添加参数 出现在 SQL 字符串中。

于 2009-07-11T17:01:13.403 回答
1

AFAIK,Access 不支持命名参数。你应该使用“?” 在您的查询中指定参数:

    string sql = "INSERT INTO PodcastsDir (FileName, Department, [Month], [Year]) VALUES (?, ?,?,?)";

您还应该将年份月份放在方括号中。

您的其余代码可以保持不变。

于 2009-07-11T17:06:04.440 回答
1

您可能想试试这个,Jet ie Access 中的参数很好

"INSERT INTO PodcastsDir ([FileName], [Department], [Month], [Year]) VALUES (@FileName, @Department, @Month, @Year)"; 
于 2010-10-31T13:27:02.823 回答