Оператор INSERT конфликтовал с ограничением FOREIGN KEY "FK_tKosikZbozi_tKosik" - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть 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();

вот таблицы: enter image description here

в общедоступной инициализации 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) через родительскую таблицу? Но как?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...