您的位置:首页 > 其它

【已解决】循环插入InsertOnSubmit Submitchanges时出现过一次异常信息:违反了 PRIMARY KEY 约束 。不能在对象 中插入重复键。后一直报重复错误

2016-12-07 14:54 477 查看
一旦出现某一行重复, rtx.SubmitChanges();会报重复错误
但是接下去 不重复的行  也会报重复错误

原因是:

rtx.SubmitChanges()时把之前InsertOnSubmit的也提交了。


//伪代码

//Row 3是重复行

try{

for(int Row=1;Row<=5;Row++)

{

InsertOnSubmit(Row);

Submitchanges();

}

}

catch

{

write log;

}


提交Row3时会报错,并讲错误信息写入日志

开始第四行

但是在第四行时提交也会报错,原因是之前

InsertOnSubmit了Row3


在Row4 Insert 并 提交 之时,会将Row3的也提交

解决方案:

在catch中DeleteOnSubmit(Row3)

rtx.GetTable(tp).DeleteOnSubmit(obj);
//部分代码

autoworkDataContext rtx = new autoworkDataContext(Properties.Settings.Default.autoworkConnectionString);

Assembly assam = Assembly.Load("Autowork");
Type tp= assam.GetType(fname);

MethodInfo[] methods = tp.GetMethods();//获取方法
int colnr = dst.Columns.Count;

int rownr = dst.Rows.Count;
string[] colnames = new string[100];

for (int ii = 0; ii <= rownr - 1; ii++)
{
Object obj = new object();
obj = Activator.CreateInstance(tp);
for (int jj = 0; jj <= colnr - 1; jj++)
{

colnames[jj] = dst.Columns[jj].ColumnName;

string set_method = "set_" + colnames[jj];
//    MessageBox.Show(Convert.ToString(colnames[jj]));

MethodInfo method = tp.GetMethod(set_method);//获取方法
/*
Type pp= dst.Rows[ii][jj].GetType();
MessageBox.Show(Convert.ToString(pp));
*/
// MessageBox.Show(Convert.ToString(method.Name));
Type checktype = dst.Rows[ii][jj].GetType();
// MessageBox.Show(Convert.ToString(checktype.Name));

if (Convert.ToString(checktype.Name) == "Double")
{

Object[] array = { Convert.ToInt32(dst.Rows[ii][jj]) };
method.Invoke(obj, array);
}
else
{
Object[] array = { dst.Rows[ii][jj] };
method.Invoke(obj, array);
}
// MessageBox.Show(Convert.ToString(dst.Rows[ii][jj]));

}
try
{

rtx.GetTable(tp).InsertOnSubmit(obj);

rtx.SubmitChanges();
}
catch (Exception ex)
{
rtx.GetTable(tp).DeleteOnSubmit(obj);
string exrow = string.Empty;
for (int jj = 0; jj <= colnr - 1; jj++)
{
exrow = exrow + " " + dst.Rows[ii][jj].ToString();
}
textBox.AppendText("\n" + exrow + " 行\n" + ex.Message + "\n");
// MessageBox.Show(exrow+" 行\n"+ex.Message);
WriteLog(ex);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐