0

C# からアクセス データベースのテーブルを更新しようとしています。

.mdb タイプのデータベースです。

これが私が使用している接続文字列です。 public MainWindow() {

InitializeComponent();

OleDbConnection cn= new OleDbConnection();}
cn.ConnectionString=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" 
    + "C:\Users\Angela\Documents\Visual Studio 2010\Projects\Havnefoged11.mdb;" 
    + "User Id=;Password=;";

cn.Open();

Application.Current.Properties["DBConnection"] = cn;

ファイルは正しいフォルダー C:\Users\Angela\Documents\Visual Studio 2010\Projects にあります。

 private void button1_Click_1(object sender, RoutedEventArgs e)
    {

 OleDbConnection conn =             

 (OleDbConnection)Application.Current.Properties["DBConnection"];
 //Below are the values i want to put into the database 
 String dybde = Dybde.Text;
 String bredde = Bredde.Text;
 String plads = PladsNummer.Text;

String StrSQL = 
    "INSERT INTO Bådpladser (Plads_nummer,Bredde,Dybde) VALUES (´´"+ plads
        + "´,´" 
        + bredde
        + "´," 
        + dybde+");";

  OleDbCommand InsertCommand = new OleDbCommand(StrSQL, conn);

   InsertCommand.ExecuteNonQuery();
    }

次に、OleDBException was unhandled NO value given for one or more parameters というエラーが表示されます

データベース内のすべてのフィールドをテキストに変更し、フィールド名が正しいことを確認しました。プログラムを初期化すると、ldb ファイルが生成されます。しかし、ボタンを押すとすぐにエラーが発生します。

何か案は?

Ps私は含めました

  using System.Data;
   using System.Data.OleDb;
4

3 に答える 3

2

あなたStrSQLは少し疑わしいように見えます。実行する直前に、その文字列の値を表示できますか? アポストロフィや引用符が少し混乱していると思います。

String StrSQL = "INSERT INTO Bådpladser (Plads_nummer,Bredde,Dybde) VALUES (´´"+ plads +"´,´"+bredde+"´,"+dybde+");";

暗闇の中での刺し傷として、代わりにこれを試してください:

string StrSQL = string.Format("INSERT INTO Bådpladser (Plads_nummer,Bredde,Dybde) VALUES ('{0}', '{1}', '{2}')", plads, bredde, dybde);
于 2012-05-15T19:05:25.300 に答える
1

他の人が指摘しているように、あなたはSQLインジェクション攻撃にさらされています。パラメータを使用する必要があります。おそらく失敗する理由は、挿入している文字列のコンテンツに「?」が含まれている可能性があるためです。と "?" 「ここでパラメータを期待している」と暗示され、それが窒息しているのです。

に変更してみてください

String StrSQL = "INSERT INTO Bådpladser (Plads_nummer, Bredde, Dybde ) VALUES ( ?, ?, ? )";
OleDbCommand InsertCommand = new OleDbCommand(StrSQL, conn )
InsertCommand.Parameters.AddWithValue( "yourFirstParm", plads );
InsertCommand.Parameters.AddWithValue( "yourSecondParm", bredde );
InsertCommand.Parameters.AddWithValue( "yourThirdParm", dybde );

次に、それを実行しますが、注:パラメーターは「?」と同じ順序で追加する必要があります。プレースホルダー。

また、バックエンドが「?」ではなく名前付きパラメーターをサポートしている可能性があります。値...もしそうなら、あなたは次のようなものに調整する必要があるかもしれません

String StrSQL = "INSERT INTO Bådpladser (Plads_nummer, Bredde, Dybde ) "
      + "VALUES ( @parmPlads, @parmBredde, @parmDybde )";
OleDbCommand InsertCommand = new OleDbCommand(StrSQL, conn )
InsertCommand.Parameters.AddWithValue( "@parmPlads", plads );
InsertCommand.Parameters.AddWithValue( "@parmBredde", bredde );
InsertCommand.Parameters.AddWithValue( "@parmDybde", dybde );
于 2012-05-15T19:30:18.297 に答える
1

私はこれに気づきました:

String StrSQL = "INSERT INTO Bådpladser (Plads_nummer,Bredde,Dybde) VALUES (´´"+ 
                    plads +"´,´"+bredde+"´,"+dybde+");";

plad の前に 2 つのアポストロフィがあることがわかります。おそらく1つだけ必要です。それらを二重のアポストロフィとしてエスケープする必要がある場合は、各コンマの前と後の二重である可能性があります。

于 2012-05-15T19:07:03.627 に答える