Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wstawić wiele obrazów do tabeli bazy danych MySQL z kluczem obcym odwołującym się do jednego klucza podstawowego?

Twoim problemem jest ta linia:

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

To zadziała przy pierwszym wstawieniu, ponieważ LAST_INSERT_ID jest odpowiednią wartością klucza obcego.

Ale w drugim wstaw, LAST_INSERT_ID zmienił się teraz na wartość identyfikatora właśnie wstawionego rekordu (pierwszego wstawienia).

Aby to naprawić, musisz uzyskać LAST_INSERT_ID do zmiennej C# , a następnie przekazywać go do każdej kolejnej instrukcji SQL (np. @ForeignKeyID zamiast LAST_INSERT_ID ).

Będzie to oznaczać zmianę pierwszego :

cmd.ExecuteNonQuery();

do:

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

gdzie insertID jest zmienną (prawdopodobnie int ), które deklarujesz na początku swojej metody.

Musisz wtedy zmienić:

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();
    }
}

do:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mogę zmienić kolejność wyborów SQL po zastosowaniu limitu?

  2. Zapytanie MySQL nie znika po zabiciu

  3. Czy spaceite/mysql obsługuje punkt 3D?

  4. Wybierz maksymalną wartość z dwóch tabel

  5. Nie można uzyskać poprawnego kodowania w MySQL