-2

うまくいけば.....タイトルは理にかなっています。しかし、基本的にはこれが起こっていることです。ユーザーがデータベース内のテーブルからレコードを表示、更新、挿入、および削除できるフォームを作成しています。

テーブル データを表示するためにコンボ ボックスを使用しています。

新しいレコードを挿入しようとすると、複数のレコードを試すまで正常に動作します。

これは私が personID レコードだけを配置したもので、正常に動作します。

http://i.imgur.com/E2oHlXy.png

しかし、personID と firstName を追加しようとすると、次のようになります。

http://i.imgur.com/aPpIvNh.png

ご覧のとおり、personID エントリは無視され、firstName のみが対象になります。

一度に2つのものを入れることができない原因を突き止めずに、コードをさらに進めることはできません。

これが私のINSERTコードです:

string myInsertSQL;
        myInsertSQL = "INSERT INTO person(";
        myInsertSQL += "personID)";
        myInsertSQL += " VALUES ('";
        myInsertSQL += personID.Text + "')";
        myInsertSQL = "INSERT INTO person(";
        myInsertSQL += "firstName)";
        myInsertSQL += " VALUES ('";
        myInsertSQL += firstName.Text + "')";
        MySqlConnection conn = new MySqlConnection(connstring);
        MySqlCommand cmd = new MySqlCommand(myInsertSQL, conn);

上記では、firstName のみが挿入されます。

なぜこのようなことが起こるのかわかりませんが、何か意見をいただければ幸いです。ありがとう!

4

3 に答える 3

2
myInsertSQL = "INSERT INTO person(";

ここでは、myInsertSQL 文字列を完全に上書きするため、以前に入力したものはデータベースに送信する前に消えてしまいます。

于 2013-09-09T09:58:55.207 に答える
2

これを行うと、最初の文字列 ( myInsertSQL = "INSERT INTO person(";) を上書きしない場合、DB は ID と名を 2 つの異なる行に挿入します。ここでは、2 番目のクエリ (名の挿入) のみを実行します。

試す:

    myInsertSQL = "INSERT INTO person(";
    myInsertSQL += "personID, FirstName)";
    myInsertSQL += " VALUES ('";
    myInsertSQL += personID.Text + "', '"+ firstName.Text +"')";

これは、SQL インジェクションに対して広く開かれていることに注意してください。プレーンテキストをクエリに直接挿入する代わりに、準備されたステートメントを使用してみてください。

string myInsertSQL = "INSERT INTO person(personID, firstName) VALUES (@personID, @firstName)";
MySqlCommand cmd = new MySqlCommand(myInsertSQL, conn);
cmd.Parameters.AddWithValue("@personID", personID.Text);
cmd.Parameters.AddWithValue("@firstName", firstName.Text);

編集

あなたのコメントによると、これらの 2 つ以上の値を挿入しようとしています。これは同じように動作します。

このエラーは、異なる数の値とフィールドを指定したことを示しています。あなたは 6 つの値について話しますが、リストには 5 つしかありません (personID、firstName、address、phoneNumber、postCode)。lastName を忘れたようです:

string myInsertSQL = "INSERT INTO person(personID, lastName, firstName, address, phoneNumber, postCode) ";
myInsertSQL += "VALUES (@personID, @lastName, @firstName, @address, @phoneNumber, @postCode)";
MySqlCommand cmd = new MySqlCommand(myInsertSQL, conn);
cmd.Parameters.AddWithValue("@personID", personID.Text);
cmd.Parameters.AddWithValue("@lastName", lastName.Text);
cmd.Parameters.AddWithValue("@firstName", firstName.Text);
cmd.Parameters.AddWithValue("@address", address.Text);
cmd.Parameters.AddWithValue("@phoneNumber", phoneNumber.Text);
cmd.Parameters.AddWithValue("@postCode", postCode.Text);
// and so on...
于 2013-09-09T09:59:06.670 に答える
1

変数値を上書きしています

    myInsertSQL += personID.Text + "')";
    myInsertSQL = "INSERT INTO person(";
于 2013-09-09T10:00:15.373 に答える