2009-07-11 10 views
0

Hey Leute, hier ist mein Code dafür, die einzige Hilfe, die ich von VS bekomme ist, dass die Syntax der INSERT INTO-Anweisung falsch ist?SQL-Anweisung wird in C# nicht ausgeführt?

Ich habe den ganzen Code durchgegangen und kann nicht sehen, wo ich falsch gelaufen bin, kann jemand bitte eine Hand gimme?

 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(); 
     } 

    } 

Dank Ash

Antwort

1

Wenn Sie Access verwenden, sind die Parameter nicht die tatsächlichen Platzhalter, sondern die benannten Parameter.

Ändern Sie Ihre SQL-Zeichenfolge zu verwenden? als Platzhalter und nicht als benannter Parameter und stellen Sie sicher, dass Sie die Parameter in der gleichen Reihenfolge hinzufügen wie die? erscheinen in der SQL-Zeichenfolge.

+0

Dann wieder, es könnte die reservierte Wort Sache sein :) –

+0

Danke, dass dies funktioniert, versuchte die Klammern, aber es war nicht zu sicher, ich habe nur den Monat und den Namen geändert und dann verwendet? und es hat funktioniert, danke Jungs :) – Ash

+0

Er nutzt Access überhaupt nicht - er benutzt nur Jet/ACE. –

2

Sie scheinen Zugang zu verwenden - nicht Monat und Jahr Worte reserviert? Versuchen Sie, sie in eckige Klammern zu setzen (ist dies das richtige Trennzeichen für Access?) Und versuchen Sie es erneut.

+0

das klingt vertraut! –

+0

+1. schön gefleckt –

+0

Korrekt, aber das ist nicht der Hauptgrund, warum es nicht funktioniert –

1

AFAIK, Access unterstützt keine benannten Parameter. Du solltest benutzen "?" in der Abfrage-Parameter angeben:

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

Sie auch Jahr und Monat in eckigen Klammern sollten.

Der Rest Ihres Codes kann unverändert bleiben.

+0

Der Zugriff ist hier nicht beteiligt, da die Programmierumgebung C# ist. Nur Jet/ACE ist beteiligt. –

1

Vielleicht möchten Sie dies versuchen, sind Parameter, fein in Jet dh Zugang

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