INSERT语句失败 - 外键冲突 [英] INSERT statement fails - Foreign key conflict

查看:99
本文介绍了INSERT语句失败 - 外键冲突的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经做了很多次了



大图:

带有SQL Server 2008 R2数据库的CRUD WinForms应用程序。 />
我添加了一些新东西,而且我没有插手的东西现在坏了。



代码是标准的,没有异国情调这里它在最后一次更改之前有效。

I''ve done this numerous times

Big picture:
CRUD WinForms application with SQL Server 2008 R2 database.
I ''ve added few new things and one which I haven''t meddled with is now broken.

Code is standard, nothing exotic here and it worked before last changes.

try{
//...
    trans = _connection.BeginTransaction();
    
    //adapter responsible for particular parent table
    _workingOrdersAdapter.Transaction = trans;
    _rawMaterialsStockAdapter.Transaction = trans;
    _stockEntriesAdapter.Transaction = trans;
    _stockEntriesItemsAdapter.Transaction = trans;
    _stockReservationAdapter.Transaction = trans;
    _mixingPlanUtemsAdapter.Transaction = trans;

    retval = _workingOrdersAdapter.Update(dataSet.WorkingOrders);
    retval += _mixingPlanUtemsAdapter.Update(dataSet.MixingPlanItems.Select("","", DataViewRowState.Deleted));
    retval += _mixingPlanUtemsAdapter.Update(dataSet.MixingPlanItems.Select("","", DataViewRowState.ModifiedCurrent));
                
    retval += _rawMaterialsStockAdapter.Update(dataSet.RawMaterialsStock);
    retval += _stockEntriesAdapter.Update(dataSet.StockEntries);
    retval += _stockEntriesItemsAdapter.Update(dataSet.StockEntryItems);

    //here it fails. grrrrr
    retval += _mixingPlanUtemsAdapter.Update(dataSet.MixingPlanItems.Select("", "", DataViewRowState.Added));
    //this line is new. 
    retval += _stockReservationAdapter.Update(dataSet.StockReservations);


     trans.Commit();

}catch(SqlException sqlex)
{
//...
}





更新时从一个数据适配器INSERT上的数据集到数据库的数据失败:

INSERT语句与FOREIGN KEY约束FK_MixingPlanItems_WorkingOrders冲突。冲突发生在数据库Recepture,表dbo.WorkingOrders,列''WorkingOrderID''。

该声明已被终止。


< br $>
WTH?!?

当我在Management Studio中执行查询时,它运行正常。

这是一个简单的INSERT查询。



更新数据时(使用UPDATE查询)它会按原样运行。



到目前为止,我已完成以下操作:

多次配置数据适配器。

删除并再次添加特定适配器。

删除并添加了DB中的特定表连接。





如果我感到难以理解,请原谅我睡不着觉。 :(



When updating data from dataset to DB on one data adapter INSERT fails:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_MixingPlanItems_WorkingOrders". The conflict occurred in database "Recepture", table "dbo.WorkingOrders", column ''WorkingOrderID''.
The statement has been terminated.


WTH?!?
When I execute query in Management Studio it works perfectly.
It is a simple INSERT query.

When updating data (with UPDATE query) it runs as it should.

So far I have done the following:
Configured data adapter several times.
Removed and added particular adapter again.
Removed and added particular table connection in DB.


Please excuse me if I am being incomprehensible I have''t slept much. :(

推荐答案

GlobalClass c = new GlobalClass();





protected void imgbtnsave_Click(object sender,ImageClickEventArgs e)

{



OracleCommand InsertUser = new OracleCommand(ins_domain_info,con);

InsertUser.CommandType = CommandType.StoredProcedure;





InsertUser.Parameters.Add(@ domain_info_url, OracleDbType.Varchar2);

InsertUser.Parameters [@ domain_info_url]。Value = txt_url.Text;





InsertUser.Parameters.Add(@ website_registrant,OracleDbType.Varchar2);

InsertUser.Parameters [@ website_registrant]。Value = txt_websiteregistrant.Text;





InsertUser.Parameters.Add(@ created_date,OracleDbType.Date);

InsertUser.Parameters [@ created_date] .Value = txt_createddate.Text;





InsertUser.Parameters.Add(@ expiry_date,OracleDbType.Date);

InsertUser.Parameters [ @expiry_date]。值= txt_expirydate.Text;





InsertUser.Parameters.Add(@ domain_age_in_years,OracleDbType.Varchar2 );

InsertUser.Parameters [@ domain_age_in_years]。Value = txt_domainage.Text;





InsertUser.Parameters.Add(@ last_updated,OracleDbType.Date);

InsertUser.Parameters [@ last_updated]。Value = txt_lastupdate.Text;





InsertUser.Parameters.Add(@ top_level_url,OracleDbType.Varchar2);

InsertUser.Parameters [@ top_level_url]。Value = txt_TopLevelURL.Text;





InsertUser.Parameters.Add(@ domain_result,OracleDbType.Varchar2);

InsertUser.Parameters [@ domain_result]。Value = lbl_Domainresult.Text;





InsertUser.Parameters.Add(@ recommended,OracleDbType.Varchar2);

InsertUser.Parameters [@ recommended ] .Value = txt_domainrecommendation.Text;



InsertUser.Parameters.Add(@ REGISTER_PROSPECT_ID,OracleDbType.Varchar2);

InsertUser .Parameters [@ REGISTER_PROSPECT_ID]。Value = Session [seo_prosid]。ToString();



InsertUser.Parameters.Add(@ domain_info_id,OracleDbType .Int64,20);

InsertUser.Parameters [@ domain_info_id]。Direction = ParameterDirection.Output;



try

{

if(con.State == 0)

{

con.Open();

}

InsertUser.ExecuteNonQuery();



}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}



终于

$



MessageBox.Show(数据已成功保存);

clear();

con.Close();

}



}
GlobalClass c = new GlobalClass();


protected void imgbtnsave_Click(object sender, ImageClickEventArgs e)
{

OracleCommand InsertUser = new OracleCommand("ins_domain_info",con);
InsertUser.CommandType=CommandType.StoredProcedure;


InsertUser.Parameters.Add("@domain_info_url", OracleDbType.Varchar2);
InsertUser.Parameters["@domain_info_url"].Value = txt_url.Text;


InsertUser.Parameters.Add("@website_registrant", OracleDbType.Varchar2);
InsertUser.Parameters["@website_registrant"].Value = txt_websiteregistrant.Text;


InsertUser.Parameters.Add("@created_date", OracleDbType.Date);
InsertUser.Parameters["@created_date"].Value = txt_createddate.Text;


InsertUser.Parameters.Add("@expiry_date", OracleDbType.Date);
InsertUser.Parameters["@expiry_date"].Value = txt_expirydate.Text;


InsertUser.Parameters.Add("@domain_age_in_years", OracleDbType.Varchar2);
InsertUser.Parameters["@domain_age_in_years"].Value = txt_domainage.Text;


InsertUser.Parameters.Add("@last_updated", OracleDbType.Date);
InsertUser.Parameters["@last_updated"].Value = txt_lastupdate.Text;


InsertUser.Parameters.Add("@top_level_url", OracleDbType.Varchar2);
InsertUser.Parameters["@top_level_url"].Value = txt_TopLevelURL.Text;


InsertUser.Parameters.Add("@domain_result", OracleDbType.Varchar2);
InsertUser.Parameters["@domain_result"].Value = lbl_Domainresult.Text;


InsertUser.Parameters.Add("@recommendation", OracleDbType.Varchar2);
InsertUser.Parameters["@recommendation"].Value = txt_domainrecommendation.Text;

InsertUser.Parameters.Add("@REGISTER_PROSPECT_ID", OracleDbType.Varchar2);
InsertUser.Parameters["@REGISTER_PROSPECT_ID"].Value = Session["seo_prosid"].ToString();

InsertUser.Parameters.Add("@domain_info_id", OracleDbType.Int64, 20);
InsertUser.Parameters["@domain_info_id"].Direction = ParameterDirection.Output;

try
{
if (con.State == 0)
{
con.Open();
}
InsertUser.ExecuteNonQuery();

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

finally
{

MessageBox.Show("Data Saved Successfully");
clear();
con.Close();
}

}


这篇关于INSERT语句失败 - 外键冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆