2009-07-11 12 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(); 
     } 

    } 

アッシュ

答えて

1

アクセスを使用している場合は、実際にはパラメータではなく、名前付きパラメータではなくホルダーを配置します。

使用するSQL文字列を変更しますか?名前付きパラメータではなくプレースホルダとして使用し、? SQL文字列に表示されます。

+0

もう一度、それは予約語物かもしれません:) –

+0

これはうまくいきました、これはうまくいっていませんでしたが、それは働いた、ありがとう男: – Ash

+0

彼は全くアクセスを使用していない - 彼はジェット/ ACEを使用しています。 –

2

おかげであなたは、Accessを使用しているように見える - 月と年は言葉を予約されていませんか?角カッコで囲んでみてください(これはAccessの正しい区切り文字ですか?)。もう一度試してみてください。

+0

ジェット、すなわちアクセス罰金です! –

+0

+1。きちんと見つかった –

+0

正解ですが、それがうまくいかない主な理由ではありません。 –

1

AFAIKでは、アクセスは名前付きパラメータをサポートしていません。あなたは "?"クエリでパラメータを指定します

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

あなたはまた、角括弧でと年を置く必要があります。

残りのコードは変更しないでください。あなたはこれをしようとする場合があります

+0

プログラミング環境はC#であるため、アクセスはここには含まれていません。 Jet/ACEのみが含まれます。 –

1

、パラメータは聞き覚えその

"INSERT INTO PodcastsDir ([FileName], [Department], [Month], [Year]) VALUES (@FileName, @Department, @Month, @Year)"; 
関連する問題