2009-07-11 3 views
0

Привет, ребята, вот мой код для этого, единственная помощь, которую я получаю от VS, заключается в том, что синтаксис инструкции INSERT INTO неверен?Заявление SQL не будет выполняться в C#?

Я прошел весь код и просто не могу видеть, где я поступил неправильно, может кто-нибудь прокомментировать руку?

 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

ответ

1

Если вы используете Access, это не параметры, которые на самом деле размещают держатели, а не именованные параметры.

Изменить строку SQL для использования? как замещающий, а не именованный параметр, и убедитесь, что вы добавили параметры в той же последовательности, что и? появляются в строке SQL.

+0

Опять же, это может быть зарезервированное слово thing :) –

+0

Спасибо, что это сработало, попробовал скобки, но это было не слишком уверенно, я просто изменил название месяца и года, а затем использовал? и это сработало, спасибо парням :) – Ash

+0

Он вообще не использует Access - он использует только Jet/ACE. –

2

Вы, кажется, использует Access - не месяц и год зарезервированные слова? Попробуйте заключить их в квадратные скобки (это правильный разделитель для доступа?) И повторите попытку.

+0

это звучит знакомо! –

+0

+1. красиво пятнистый –

+0

Правильно, но это не главная причина, почему он не работает –

1

AFAIK, Access не поддерживает именованные параметры. Вы должны использовать "?" в запросе указать параметры:

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

Вы также должны поставить год и Месяц в квадратных скобках.

Остальная часть вашего кода может быть оставлена ​​без изменений.

+0

Доступ здесь не задействован, так как среда программирования C#. Используется только Jet/ACE. –

1

Вы можете попробовать это, параметры хорошо в Jet т.е. Access

"INSERT INTO PodcastsDir ([FileName], [Department], [Month], [Year]) VALUES (@FileName, @Department, @Month, @Year)"; 
Смежные вопросы