2011-10-20 8 views
0

私はデータベースとしてVB.NetとMySQLを使用しています。私は初心者です。私はMySQLの外来キーを使用して問題があります。 MySQLでは、私はinqテーブルをプライマリテーブルとして作成し、inqcontactテーブルを作成しました。VB.NetとMySQL

CREATE TABLE inq(
    number INT NOT NULL AUTO_INCREMENT, 
    lastname VARCHAR(20), 
    firstname VARCHAR(20), 
    middlename VARCHAR(20), 
    PRIMARY KEY(number)); 

CREATE TABLE inqcontact(
    noinqcontact INT NOT NULL AUTO_INCREMENT, 
    mobile VARCHAR(20), 
    telephone VARCHAR(20), 
    emailadd VARCHAR(20), 
    number INT, 
    PRIMARY KEY(noinqcontact), 
    FOREIGN KEY(number) REFERENCES inq(number)); 

とここに私のVB.Netコードです:

CommInq1 = New MySqlCommand("INSERT INTO inq VALUES (number,'" & txtLastName.Text & "','" & txtFirstName.Text & "','" & txtMiddleName.Text & "')", ConnInq) 
     ConnInq.Open() 
     CommInq1.ExecuteNonQuery() 

     CommInq2 = New MySqlCommand("INSERT INTO inqcontact VALUES (noinqcontact,'" & txtMobileNo.Text & "','" & txtTelephoneNo.Text & "','" & txtEmailAdd.Text & "',number)", ConnInq) 
     CommInq2.ExecuteNonQuery() 
     ConnInq.Close() 

     MessageBox.Show("Saved!", "") 

マイVB.Netコードがinqcontact表でnumber外部キーにNULL値を返しますが、ここに私のMySQLのコードです。つまり、inqの表には、numberフィールドが自動的に増分されるため、問題はありません。しかし、inqcontactテーブルでは、外部キーであるnumberフィールドはNULL値です。私が提供したコードに何が間違っているか教えてください。私は、エラーは私のVB.Netからのデータの挿入にあると思う。

答えて

2

私は、一般的にSQLサーバーではなく、私のSQLを使用しますが、私はあなたが基本的に次のことを行うことができるはずと信じてい

CommInq1 = New MySqlCommand("INSERT INTO inq (lastname,firstname,middlename) 
       VALUES (@lastname,@firstname,@middlename)",ConnInq) 

CommInq1.Parameters.Add("@lastname",MySql.Data.MySqlClient.MySqlDbType.VarChar,20).Value=txtLastName.Text 
CommInq1.Parameters.Add("@firstname",MySql.Data.MySqlClient.MySqlDbType.VarChar,20).Value=txtFirstName.Text 
CommInq1.Parameters.Add("@middlename",MySql.Data.MySqlClient.MySqlDbType.VarChar,20).Value=txtMiddleName.Text 

ConnInq.Open() 
CommInq1.ExecuteNonQuery() 

CommInq2 = New MySqlCommand("INSERT INTO inqcontact (mobile,telephone,emailadd,number) 
       VALUES (@mobile,@telephone,@emailadd,@number)",ConnInq) 

CommInq2.Parameters.Add("@mobile",MySql.Data.MySqlClient.MySqlDbType.VarChar,20).Value=txtMobileNo.Text 
CommInq2.Parameters.Add("@telephone",MySql.Data.MySqlClient.MySqlDbType.VarChar,20).Value=txtTelephoneNo.Text 
CommInq2.Parameters.Add("@emailadde",MySql.Data.MySqlClient.MySqlDbType.VarChar,20).Value=txtEmailAdd.Text 
CommInq2.Parameters.Add("@number",MySql.Data.MySqlClient.MySqlDbType.Int32) 
     .Value=CommInq1.LastInsertedId 
      ' or use select last_insert_id() to get the last id 

CommInq2.ExecuteNonQuery() 
ConnInq.Close() 
+0

すべてのフィールドは**あなたのコードで** NULL **です。私は_MySQLコマンドラインClient_を使用してあなたの前に使用したコードで挿入しようとしました: 'INSERT INTO inq VALUES(数字、 'SomeText'、 'SomeText'、 'SomeText'); ' そしてそれは4つのフィールドを満たします。しかし、この1つは: 'INSERT INTOの連絡先VALUE(noinqcontact、 'SomeText'、 'Sometext'、SomeText '、number);' 第1から第4のフィールドはOKですが、最後の(**数値**)外のキーです、でした... 私のVB.Net構文に間違いはありません。私はそれが私のMySQL構文であると思う。 – aer

+0

+1 PDOを使用します。 – Johan

2

、これを試してみてください。そして、

CommInq1 = New MySqlCommand("INSERT INTO inq (lastname,firstname,middlename) 
       VALUES (@lastname,@firstname,@middlename); select last_insert_id()" ,ConnInq) 
CommInq1.Parameters.Add("@lastname",MySql.Data.MySqlClient.MySqlDbType.VarChar,20).Value=txtLastName.Text 
CommInq1.Parameters.Add("@firstname",MySql.Data.MySqlClient.MySqlDbType.VarChar,20).Value=txtFirstName.Text 
CommInq1.Parameters.Add("@middlename",MySql.Data.MySqlClient.MySqlDbType.VarChar,20).Value=txtMiddleName.Text 

ConnInq.Open() 
Dim id as Integer = cint(CommInq1.ExecuteScalar()) 

とを進めます挿入された項目のキーの値としてidを使用する2番目のクエリ。私は上記の答えからコードをコピーしました。なぜなら、より適切な(注射とすべてに対する安全)と習慣だからです。次に挿入されたIDを取得するために2番目のクエリが続きます。

関連する問題