2017-06-21 7 views
0

私はASP.NET、C#、そしてMYSQLを使ってウェブサイトをプログラミングしています。 同じchild_idを持つ2つの行を記録できる必要があります。同じLAST_INSERT_ID()を1つのテーブルに挿入して複数のレコードを作成する方法。

私の問題は、この1つのステートメントでは、1行を挿入し、最後をスキップします。

//data.ChldrenRecord.Service contain two records 
    // babysit, and tutor 
    foreach (string s in data.ChildrenRecord.Services) 
    { 
    query += (" INSERT INTO ServiceChildren SET service='" + s + "', child_id=LAST_INSERT_ID();"); 
    } 

ので、表にはchild_idが外部キーであるので、私はLAST_INSERT_ID()を使用し、この

id service child_id 
1 babysit 1 
2 tutor  1 

ようになるはずです。プライマリキーがchild_idである別のテーブルにレコードを作成します。その後、LAST_INSERT_ID()を使用してそのレコードの主キーchild_idを参照し、ServiceChildrenテーブルで使用できるようにします。

それは私のテーブルを立つようになります。

id service child_id 
1  babysit 1 

私は今右のトラックにと思います。

SET @last_id = LAST_INSERT_ID(); 
//then insert statements 
    INSERT INTO ServiceChildren(service, child_id) VALUES('babysit', @last_id); 
    INSERT INTO ServiceChildren(service, child_id) VALUES('tutor', @last_id); 

を私のC#、ASP.NET CODE THE LINE IN SET @last_id = LAST_INSERT_ID();:私は、データベースに直接ログインした場合、この文は動作します は何もしません。以前の挿入ステートメントでテーブルにデータを入力します。

+0

前のクエリからLAST_INSERT_ID値を取得し、その値をループ内で使用します。ただし、ASAPをパラメータ化されたクエリに切り替えることを検討してください。文字列の連結はちょうど起こるのを待っている災害です(Sql Injectionについて読む) – Steve

+0

ちなみに、あなたはUPDATEの構文を使用しています。それはINSERTステートメントではうまくいきません – Steve

+0

すぐに使用する正しいパラメータ化クエリが見つからないため、文字列連結を使用する必要がありました。私はこれがベビーシッターや家庭教師の代わりに '@Service'につながっていたので、これを知っています。 – Bernardo

答えて

0

OK、私の問題を発見しました。 Allow User Variables = Trueを接続文字列に配置して、@last_idを作成して使用する必要がありました。

関連する問題