0

だから私はこのフォームを持っています: http://i.imgur.com/vZYssQy.png

IDFirst NameLast NameDOBAddressPhone NumberおよびPost Codeテキストボックスは、というテーブルに挿入することになっています(personこれは機能し、挿入されます)

これに対する私のコードは次のとおりです。

public static void insertStudent(int personId, string firstName, string lastName, string DOB, int phoneNumber, string address, int postCode, string majorField, int gradePointAverage)
{
    MySqlConnection conn = connection();
    conn.Open();
    MySqlCommand cmd = new MySqlCommand();
    cmd.Connection = conn;
    string myInsertSQL = "INSERT INTO person(personId, firstName, lastName, DOB, phoneNumber, address, postCode) VALUES (@personId, @firstName, @lastName, @DOB, @phoneNumber, @address, @postCode)";
    cmd.Prepare();
    cmd.CommandText = myInsertSQL;
    cmd.Parameters.AddWithValue("@personId", personId);
    cmd.Parameters.AddWithValue("@firstName", firstName);
    cmd.Parameters.AddWithValue("@lastName", lastName);
    cmd.Parameters.AddWithValue("@DOB", DOB);
    cmd.Parameters.AddWithValue("@phoneNumber", phoneNumber);
    cmd.Parameters.AddWithValue("@address", address);
    cmd.Parameters.AddWithValue("@postCode", postCode);
    cmd.ExecuteNonQuery();
}

しかし、他の 2 つのテキスト ボックスは、という別のテーブルに移動する必要がありGPAます。そして、私がこれのために持っているコードは次のとおりです。Major Fieldstudent

 string myInsertSQLStudent = "INSERT INTO student(majorField, gradePointAverage) VALUES (@majorField, @gradePointAverage)";
            cmd.Prepare();
            cmd.CommandText = myInsertSQLStudent;
            cmd.Parameters.AddWithValue("@majorField", majorField);
            cmd.Parameters.AddWithValue("@gradePointAverage", gradePointAverage);
            prevID(conn, cmd);

上記のコードのすぐ下にあります。これは機能しませんが、クラッシュしCannot add or update a child row: a foreign key constraint fails、主キーについて話していることを知らせるメッセージが表示されます。

ただし、テキスト ボックスに入力し、プログラムをクリックinsertするとクラッシュしますが、personテーブルにはデータが入力されますが、テーブルには入力されstudentません。

それを機能させるにはどうすればよいですか?

ありがとうございました!

編集:

これは私の人のテーブルです:

personId | firstName | lastName | DOB | phoneNumber | address | postCode |

blah     |blah       |blah      |blah |blah         |blah     |blah      |blah

これは私の学生のテーブルです

person_personId | majorField | gradePointAverage |
balh            |blah        |blah               |
4

2 に答える 2

3

studentテーブルには、テーブルを参照するフィールドが含まれている可能性がありpersonIdますperson。それも記入する必要があります (2 番目の挿入で)。

また、両方の挿入をトランザクション内に配置することをお勧めします。そうすれば、一貫性のない、またはちょっとしたデータで終わることはありません。トランザクションでは、現在のようにどちらか一方ではなく、両方のレコードを取得するか、まったく取得しないかのいずれかになります。

于 2013-09-16T08:45:17.560 に答える
0

Personとの間に「1対1」の関係があるようです。外部キーがあるStudentと思われるので、それを追加する必要があります。StudentPersonId

string myInsertSQLStudent = "INSERT INTO student(personId, majorField, gradePointAverage) VALUES (@majorField, @gradePointAverage)";
            cmd.Prepare();
            cmd.CommandText = myInsertSQLStudent;
            cmd.Parameters.AddWithValue("@personId", personId);
            cmd.Parameters.AddWithValue("@majorField", majorField);
            cmd.Parameters.AddWithValue("@gradePointAverage", gradePointAverage);
            prevID(conn, cmd);

最初の挿入では、挿入されたレコードのIDを返す必要があります-select @@identity最後のステートメントとして呼び出して、var id = cmd.ExecuteScalar()それを取得するために使用できます

  string myInsertSQL = "INSERT INTO person(personId, firstName, lastName, DOB, phoneNumber, address, postCode) VALUES (@personId, @firstName, @lastName, @DOB, @phoneNumber, @address, @postCode); 
select @@identity as id";
于 2013-09-16T08:47:02.963 に答える