SQL语句不会在C#中执行?

时间:2009-07-11 16:56:25

标签: c# sql ms-access syntax jet

嘿伙计,这是我的代码,我从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();
        }

    }

谢谢Ash

4 个答案:

答案 0 :(得分:2)

您似乎正在使用Access - 不是月份和年份保留字吗?尝试将它们放在方括号中(这是Access的正确分隔符吗?)并再次尝试。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

您还应将放在方括号中。

其余代码可以保持不变。

答案 3 :(得分:1)

你可能想试试这个,Jet中的参数很好,即访问

"INSERT INTO PodcastsDir ([FileName], [Department], [Month], [Year]) VALUES (@FileName, @Department, @Month, @Year)";