Оператор INSERT конфликтовал с ограничением FOREIGN KEY "tableConstraint" - PullRequest
0 голосов
/ 02 ноября 2019

Полная ошибка: поставщик данных .Net SqlClient. Оператор INSERT вступил в конфликт с ограничением FOREIGN KEY "FK_SalesOrder_SalesOrderHead". Конфликт произошел в базе данных «ControlSecurity», таблице «dbo.SalesOrderHead», столбце «id».

Информация о таблице БД: FK_SalesOrder_SalesOrderHead (отношение) имеет идентификатор первичного ключа из SalesOrderHead и FK = SalesOrderID.

SalesOrderInsert(Stored Procedure)

[dbo].[SalesOrderInsert] 
@SalesOrder udtSalesOrder readonly
AS
BEGIN
INSERT INTO SalesOrder
(ProductID,Quantity,UnitPrice,SalesOrderID)
SELECT ProductID,Quantity,UnitPrice,SalesOrderID
FROM @SalesOrder
END

Определяемая пользователем таблица* Таблица. Все это в одной транзакции в коде C #. Но похоже, что второй ExecuteNonQuery не знает, что он является частью транзакции, или мое понимание области транзакции неверно. Должен ли я разместить запрос хранимой процедуры здесь. Я не уверен.

using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["dbconn"].ToString()))
            {
                try
                {
                    con.Open();

                    using (var tran = con.BeginTransaction())
                    {
                        try
                        {

                            SqlCommand cmd = new SqlCommand("Insert into SalesOrderHead(cust_id,Description,OrderDate,DeliveryDate,Priority,CustomerRef) VALUES(@cust_id,@Description,@OrderDate,@DeliveryDate,@Priority,@CustomerRef) SELECT @id = CAST(SCOPE_IDENTITY() AS int)",con,tran);
                            cmd.Parameters.AddWithValue("@cust_id", CustomersList.EditValue);
                            cmd.Parameters.AddWithValue("@Description", Remarks.Text);
                            cmd.Parameters.AddWithValue("@OrderDate", OrderDate.DateTime);
                            cmd.Parameters.AddWithValue("@DeliveryDate", DeliveryDate.DateTime);
                            cmd.Parameters.AddWithValue("@Priority", PriorityComboBox.Text);
                            cmd.Parameters.AddWithValue("@CustomerRef", CustomerRef.Text);
                            cmd.Parameters.AddWithValue("@id", SqlDbType.Int).Direction = ParameterDirection.Output;
                            cmd.ExecuteNonQuery();
                            var SalesOrderHeadID = cmd.Parameters["@id"].Value;


                            cmd.Parameters.Clear();
                            cmd.CommandText = "SalesOrderInsert";

                            //cmd = new SqlCommand("SalesOrderInsert", con, tran);
                            //cmd.Transaction = tran;
                            cmd.CommandType = CommandType.StoredProcedure;
                            //Add from SalesOrderTB to SalesOrder stored procedure
                            cmd.Parameters.AddWithValue("@SalesOrder", SalesOrderTB);
                            cmd.ExecuteNonQuery();

                            // Record inserted in both table
                            tran.Commit();

                            XtraMessageBox.Show("Added to database success");
                            con.Close();
                        }
                        catch (SqlException ex)
                        {
                            tran.Rollback();
                            Console.WriteLine(ex.Source + ex.Message);
                        }
                    }

                }
                catch (Exception)
                {

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