У меня есть eshop с tZbozi (таблица продуктов), tKosik (таблица корзины) и средний стол, так что это N: M. На моем ПК все работает нормально, но когда я положил его на сервер, я получил
"Оператор INSERT конфликтовал с ограничением FOREIGN KEY" FK_tKosikZbozi_tKosik ". Конфликт произошел в базе данных" sumenergocz1 ", таблице" dbo.tKosik ", столбце" idKosik ".
Заявление было прекращено. "
Вот мой метод ДОБАВИТЬ:
// Check if exist row of this product in this cart table
bool exist = false;
int pocetKosik = 0;
string sqlCommand = "SELECT zboziPocet FROM tKosikZbozi WHERE zboziID = @idZbozi AND kosikID = @id";
SqlCommand select = new SqlCommand(sqlCommand, connection);
select.Parameters.Add("@idZbozi", SqlDbType.Int).Value = ProductID;
select.Parameters.Add("@ID", SqlDbType.Int).Value = this.cookie.Values["id"];
connection.Open();
if (select.ExecuteScalar() != null)
{
pocetKosik = Convert.ToInt32(select.ExecuteScalar());
exist = true; // if exist row, i save that it exist
}
connection.Close();
// Update date in cart table
sqlCommand = "UPDATE tKosik SET casPristupuKosik = @newDate WHERE idKosik = @id";
SqlCommand updateDate = new SqlCommand(sqlCommand, connection);
updateDate.Parameters.Add("@newDate", SqlDbType.VarChar, 14).Value = this.cookie.Values["date"];
updateDate.Parameters.Add("@id", SqlDbType.Int).Value = this.cookie.Values["id"];
connection.Open();
updateDate.ExecuteNonQuery();
connection.Close();
// HERE ADD SOMETHING INTO MIDDLE TABLE
if (!exist) // if dont exist row for this table, i insert new row
sqlCommand = "INSERT INTO tKosikZbozi (zboziID, zboziPocet, kosikID) VALUES (@idZbozi , @pocetZbozi, @id)";
else // if exist, i update exist row
sqlCommand = "UPDATE tKosikZbozi SET zboziPocet += @pocetZbozi WHERE zboziID = @idZbozi AND kosikID = @id";
SqlCommand insertOrUpdate = new SqlCommand(sqlCommand, connection);
insertOrUpdate.Parameters.Add("@idZbozi", SqlDbType.Int).Value = ProductID;
insertOrUpdate.Parameters.Add("@pocetZbozi", SqlDbType.Int).Value = ProductNumber;
insertOrUpdate.Parameters.Add("@id", SqlDbType.Int).Value = this.cookie.Values["id"];
connection.Open();
insertOrUpdate.ExecuteNonQuery(); // And here is problem and i dont know how :-(
connection.Close();
вот таблицы:
в общедоступной инициализации Cart ():
// create cart in tKosik
string sqlCommand = "INSERT INTO tKosik (casPristupuKosik, randomIDKosik) values(@date, @id)";
SqlCommand insert = new SqlCommand(sqlCommand, connection);
insert.Parameters.Add("@date", SqlDbType.VarChar,14).Value = this.cookie.Values["date"];
insert.Parameters.Add("@id", SqlDbType.Int).Value = this.cookie.Values["randomIDKosik"];
connection.Open();
insert.ExecuteNonQuery();
connection.Close();
// SELECT idKosik and add to cookies
sqlCommand = "SELECT idKosik FROM tKosik WHERE randomIDKosik = @ID AND casPristupuKosik = @date";
SqlCommand select = new SqlCommand(sqlCommand, connection);
select.Parameters.Add("@ID", SqlDbType.Int).Value = this.cookie.Values["randomIDKosik"];
select.Parameters.Add("@date", SqlDbType.VarChar, 14).Value = this.cookie.Values["date"];
connection.Open();
this.cookie.Values.Add("id", select.ExecuteScalar().ToString());
connection.Close();
Может быть, я могу как-нибудь добавить в n-таблицу (в отношении 1: n) через родительскую таблицу? Но как?