WPF中datagridview控件中输入的数据在保存到SQL Server 2010 数据库时如何处理各个字段唯一性约束的异常情况,不想再通过查询语句及if语句判断了,太麻烦了,能不能利用try catch语句直接获取异常然后抛出呢?但是异常如何获取呢?还请大家告知~~~
datagridview控件数据保存的部分代码如下:
string code = txtCode.Text;
string date = txtDate.Text;
string Dep = cmbDep.SelectedValue.ToString();
string Jzcode = cmbJzCode.SelectedValue.ToString();
string JzName = txtJzName.Text;
string ProName = cmbProLName.SelectedValue.ToString();
string ProCompName = cmbCompe.Text;
string LryCode = txtLry.Text;
string LryName = txtLryName.Text;
int i = 0;
for (; i < dgPrint.Rows.Count - 1; i++)
{
string value1 = dgPrint.Rows[i].Cells[0].Value.ToString();
string value2 = dgPrint.Rows[i].Cells[1].Value.ToString();
string value3 = dgPrint.Rows[i].Cells[2].Value.ToString();
string value4 = dgPrint.Rows[i].Cells[3].Value.ToString();
string value5 = dgPrint.Rows[i].Cells[4].Value.ToString();
conn.Open();
string sql = "select count(*) from table_BarcodePrint where Code='" + code + "' and DepartName='" + Dep + "' and JzCode='" + Jzcode + "' and ProLineName='" + ProName + "' and LCMCode='" + value1 + "' and [B/LCode]='" + value2 + "' and CellCode='" + value4 + "' and ZBDCode='" + value4 + "' and ScanDate='"+value5+"'";//判断记录是否存在
SqlCommand comm = new SqlCommand(sql, conn);
if (comm.ExecuteScalar().ToString() == "0")
{
conn.Close();
conn.Open();
string sql1 = "insert into table_BarcodePrint(Code,[Date],DepartName,JzCode,JzName,ProLineName,ProLineCompeName,TempCode,TempName,LCMCode,[B/LCode],CellCode,ZBDCode,ScanDate) " +
"values('" + code + "','" + date + "','" + Dep + "','" + Jzcode + "','" + JzName + "','" + ProName + "','" + ProCompName + "','" + LryCode + "','" + LryName + "','" + value1 + "','" + value2 + "','" + value3 + "','" + value4 + "','" + value5 + "')";
SqlCommand comm1 = new SqlCommand(sql1, conn);
comm1.ExecuteNonQuery();
conn.Close();
}
else
{
conn.Close();
continue;
}
}
datagridview控件数据保存的部分代码如下:
string code = txtCode.Text;
string date = txtDate.Text;
string Dep = cmbDep.SelectedValue.ToString();
string Jzcode = cmbJzCode.SelectedValue.ToString();
string JzName = txtJzName.Text;
string ProName = cmbProLName.SelectedValue.ToString();
string ProCompName = cmbCompe.Text;
string LryCode = txtLry.Text;
string LryName = txtLryName.Text;
int i = 0;
for (; i < dgPrint.Rows.Count - 1; i++)
{
string value1 = dgPrint.Rows[i].Cells[0].Value.ToString();
string value2 = dgPrint.Rows[i].Cells[1].Value.ToString();
string value3 = dgPrint.Rows[i].Cells[2].Value.ToString();
string value4 = dgPrint.Rows[i].Cells[3].Value.ToString();
string value5 = dgPrint.Rows[i].Cells[4].Value.ToString();
conn.Open();
string sql = "select count(*) from table_BarcodePrint where Code='" + code + "' and DepartName='" + Dep + "' and JzCode='" + Jzcode + "' and ProLineName='" + ProName + "' and LCMCode='" + value1 + "' and [B/LCode]='" + value2 + "' and CellCode='" + value4 + "' and ZBDCode='" + value4 + "' and ScanDate='"+value5+"'";//判断记录是否存在
SqlCommand comm = new SqlCommand(sql, conn);
if (comm.ExecuteScalar().ToString() == "0")
{
conn.Close();
conn.Open();
string sql1 = "insert into table_BarcodePrint(Code,[Date],DepartName,JzCode,JzName,ProLineName,ProLineCompeName,TempCode,TempName,LCMCode,[B/LCode],CellCode,ZBDCode,ScanDate) " +
"values('" + code + "','" + date + "','" + Dep + "','" + Jzcode + "','" + JzName + "','" + ProName + "','" + ProCompName + "','" + LryCode + "','" + LryName + "','" + value1 + "','" + value2 + "','" + value3 + "','" + value4 + "','" + value5 + "')";
SqlCommand comm1 = new SqlCommand(sql1, conn);
comm1.ExecuteNonQuery();
conn.Close();
}
else
{
conn.Close();
continue;
}
}
可能不太清楚我的问题吧,再说明一下:for循环中执行insert语句时数据库可能会报插入异常错误(目前主要考虑某些字段不唯一的情况),我要在catch中捕捉这种异常并抛出让用户能看懂出了什么问题,我现在不知道如何捕捉数据库执行异常
string code = txtCode.Text;
string date = txtDate.Text;
string Dep = cmbDep.SelectedValue.ToString();
string Jzcode = cmbJzCode.SelectedValue.ToString();
string JzName = txtJzName.Text;
string ProName = cmbProLName.SelectedValue.ToString();
string ProCompName = cmbCompe.Text;
string LryCode = txtLry.Text;
string LryName = txtLryName.Text;
int i = 0;
try
{
conn.Open();
for (; i < dgPrint.Rows.Count - 1; i++)
{
string value1 = dgPrint.Rows[i].Cells[0].Value.ToString();
string value2 = dgPrint.Rows[i].Cells[1].Value.ToString();
string value3 = dgPrint.Rows[i].Cells[2].Value.ToString();
string value4 = dgPrint.Rows[i].Cells[3].Value.ToString();
string value5 = dgPrint.Rows[i].Cells[4].Value.ToString();
string sql = "select count(*) from table_BarcodePrint where Code='" + code + "' and DepartName='" + Dep + "' and JzCode='" + Jzcode + "' and ProLineName='" + ProName + "' and LCMCode='" + value1 + "' and [B/LCode]='" + value2 + "' and CellCode='" + value4 + "' and ZBDCode='" + value4 + "' and ScanDate='" + value5 + "'";//判断记录是否存在
using (SqlCommand comm = new SqlCommand(sql, conn))
{
if (comm.ExecuteScalar().ToString() == "0")
{
string sql1 = "insert into table_BarcodePrint(Code,[Date],DepartName,JzCode,JzName,ProLineName,ProLineCompeName,TempCode,TempName,LCMCode,[B/LCode],CellCode,ZBDCode,ScanDate) " +
"values('" + code + "','" + date + "','" + Dep + "','" + Jzcode + "','" + JzName + "','" + ProName + "','" + ProCompName + "','" + LryCode + "','" + LryName + "','" + value1 + "','" + value2 + "','" + value3 + "','" + value4 + "','" + value5 + "')";
comm.CommandText = sql1;
comm.ExecuteNonQuery();
}
}
}
}
catch (Exception ex)
{
// 这里加上你要显示给用处的错误信息,比如弹个框什么的
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
{
// 这里加上你要显示给用处的错误信息,比如弹个框什么的
MessageBox.Show(ex.Message);
}
只能捕获数据库给出的错误,而这种错误用户可能看不懂,怎么才能让用户能看懂呢?