sql >> データベース >  >> RDS >> Mysql

単一の主キーを参照する外部キーを使用して複数の画像をMySQLデータベーステーブルに挿入する方法

    あなたの問題はこの行です:

    using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
    

    LAST_INSERT_IDなので、これは最初の挿入で機能します は適切な外部キー値です。

    しかし、 挿入、LAST_INSERT_ID 挿入したばかりのレコード(最初の挿入)のID値に変更されました。

    これを修正するには、LAST_INSERT_IDを取得する必要があります C#変数に 、次にそれを後続のすべてのSQLステートメントに渡します(つまり、LAST_INSERT_IDではなく@ForeignKeyID) 。

    これは、最初のを変更することを意味します :

    cmd.ExecuteNonQuery();
    

    宛先:

    cmd.ExecuteNonQuery();
    insertedID = cmd.LastInsertedId;
    

    ここで、insertedIDは変数です(おそらくint )メソッドの先頭で宣言すること。

    次に、変更する必要があります:

    using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
    {
    
    
        using (MySqlDataAdapter sda = new MySqlDataAdapter())
        {
    
            cmd.Parameters.AddWithValue("@MultipleImageName", file.FileName);
            cmd.Parameters.AddWithValue("@MultipleImageMap", "ImagesUploaded/" + file.FileName);
    
            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
    }
    

    宛先:

    using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, @InsertedID); "))
    {
    
    
        using (MySqlDataAdapter sda = new MySqlDataAdapter())
        {
    
            cmd.Parameters.AddWithValue("@MultipleImageName", file.FileName);
            cmd.Parameters.AddWithValue("@MultipleImageMap", "ImagesUploaded/" + file.FileName);
            cmd.Parameters.AddWithValue("@MultipleImageMap", "ImagesUploaded/" + file.FileName);
            cmd.Parameters.AddWithValue("@InsertedID", InsertedID);
    
            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
    }
    



    1. エラーの取得-ORA-01858:数字が予期されていた場所に数字以外の文字が見つかりました

    2. プログラミング言語がキャメルケースを使用する場合、PostgreSQL識別子のアンダースコアまたはキャメルケース?

    3. ラグの長さが可変の難しさ

    4. caseステートメント(MYSQL)を使用して、別のテーブルの値に基づいて1つのテーブルを更新します