【发布时间】:2018-12-26 17:26:09
【问题描述】:
回答
在阅读结束之前清除文本框是一个错误。
感谢@muhammad-azim
结束回答
我首先在数据库中有 2 个插入,第二个对第一个有一个外键。
执行第二个INSERT 时出现错误:
INSERT 语句与 FOREIGN KEY 约束冲突
这部分出错了
代码:
SqlConnection con1 = new SqlConnection(connectionString);
SqlCommand cmd1 = new SqlCommand(cmdString, con1);
con1.Open();
cmd1.ExecuteNonQuery(); // insert(987,10000,2019-07-27 12:00:00 AM)
con1.Close();
// Some Code
SqlConnection con2 = new SqlConnection(connectionString);
SqlCommand cmd2 = new SqlCommand(cmdString2, con2);
con2.Open()
cmd2.ExecuteNonQuery();//want insert(1,987,2000,2019-07-28 12:00:00 AM) but Got error
con2.Close();
两个查询都是INSERT
我认为 Connection 不理解更新的数据库并收到此错误。 当我停止应用程序并单独运行另一次第二次查询时,它可以工作(以前不起作用)
所有代码
PersianCalendar pc = new PersianCalendar();
string[] dateInfo = txtcreteDate.Text.Split('-');
DateTime createDate = new DateTime(Convert.ToInt32(dateInfo[0]), Convert.ToInt32(dateInfo[1]), Convert.ToInt32(dateInfo[2]), pc);
int companyid = 1;
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("INSERT INTO Factors (compId,createDate, code, duration, value," +
" discount , payType , payTypeInfo , status)" +
"VALUES " +
" (@compId,@createDate, @code, @duration, @value, @discount , @payType , @payTypeInfo , 1) ", con);
cmd.Parameters.Add("@compId", companyid);
cmd.Parameters.Add("@createDate", createDate);
cmd.Parameters.Add("@code", txtCode.Text);
cmd.Parameters.Add("@duration", Convert.ToInt32(txtDuration.Text));
cmd.Parameters.Add("@value", Convert.ToDecimal(txtValue.Text));
cmd.Parameters.Add("@discount", Convert.ToDecimal(txtDiscount.Text));
cmd.Parameters.Add("@payType", companyid);
cmd.Parameters.Add("@payTypeInfo", companyid);
con.Open();
try
{
var insertedItem = cmd.ExecuteNonQuery();
}
catch(Exception ez)
{
MessageBox.Show("شماره فاکتور تکراری است");
return;
}
ClearTextBoxes();
if (comboBox1.SelectedItem.ToString() == "نقد" && insertedItem >0)
{
for (int counter1 = 0; counter1 < cashDataGridView.Rows.Count; counter1++)
{
string status = "پرداخت نشده";
PersianCalendar pc1 = new PersianCalendar();
string[] dateInfoPay = cashDataGridView.Rows[counter1].Cells["date"].Value.ToString().Split('-');
DateTime PayDate = new DateTime(Convert.ToInt32(dateInfoPay[0]), Convert.ToInt32(dateInfoPay[1]), Convert.ToInt32(dateInfoPay[2]), pc1);
//System.Data.SqlClient.SqlConnection con1 = new System.Data.SqlClient.SqlConnection(connectionString);
string cmdString = "INSERT INTO Payout (value,date,status,description,fid)";
cmdString += " VALUES ";
cmdString += " ( '" + Convert.ToDecimal(cashDataGridView.Rows[counter1].Cells["value"].Value.ToString()).ToString() + "' ,";
cmdString += " '" + PayDate.ToString() + "' , ";
cmdString += " '" + status.ToString() + "' , ";
cmdString += " '" + status.ToString() + "' , ";
cmdString += " '" + txtCode.Text + "' )";
System.Data.SqlClient.SqlCommand cmd1 = new System.Data.SqlClient.SqlCommand(cmdString, con);
MessageBox.Show(cmd1.CommandText.ToString());
cmd1.ExecuteNonQuery(); // i got error here
}
con.Close();
【问题讨论】:
-
提供的细节太少。但首先,在
SqlConnection和SqlCommand实例周围使用using。其次,这将取决于您的数据。检查两个插入之间的数据库。即使使用 Profiler,也可以精确检查刀片。第三,干! -
我使用 .
FOREIGN Constraint导致错误。它停止插入表中,因为表 1 中没有这样的key。但我已经在cmd1中插入了这个 -
请注意,
visual-studio标记用于与 Visual Studio 应用程序相关的问题,而不是您使用它编写的代码。 -
您似乎对此很确定,但您检查过吗?记住:我们不看你的屏幕!
-
我停止运行并检查数据库并评论第一个查询并单独执行第二个查询。它工作
标签: c# sql-server