con.Open();
SqlCommand cmd1 = new SqlCommand("update Department_Master Dept_code='"+txtDepartment.Text+"'where " ,con);
SqlCommand cmd2 = new SqlCommand("update Designation_Master 'DE_1','DS_1','" + txtDesignation.Text + "'", con);
SqlCommand cmd3 = new SqlCommand("update into Position_Master values('" + var1 + "','" + var2 + "',@n,'" + txtHietrchy.Text + "')", con);
cmd3.Parameters.Add("@n", SqlDbType.Int).Value = n;
cmd3.ExecuteNonQuery();
m++;
cmd1.ExecuteNonQuery();
cmd1.ExecuteNonQuery();
cmd2.ExecuteNonQuery();
con.Close();
我想基于主键更新三个表,每个表都有这个主键作为forgein键。 有三个表
这是主键自动生成代码....
txtDesignation.Enabled = true;
con.Open();
int[] a = new int[100];
int i = 0;
String st = "select substring(Dept_code ,4,10)as DE_ID from Department_Master";
SqlDataAdapter da = new SqlDataAdapter(st, con);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = ds.Tables[0];
if (ds.Tables[0].Rows.Count != 0)
{
foreach (DataRow dr in dt.Rows)
{
a[i] = Convert.ToInt32(dr["DE_ID"].ToString());
i++;
}
int cv = a.Max();
var1 = "DE_" + Convert.ToString(cv + 1);
}
else
{
var1 = "DE_1";
}
SqlCommand cmd1 = new SqlCommand("insert into Department_Master values('" + var1 + "', '" + txtDepartment.Text + "')", con);
cmd1.ExecuteNonQuery();
//<..department end.........>
int[] b= new int[100];
int j = 0;
string st1 = "select substring(Dsgn_Code,4,10)as DS_ID from Designation_Master";
SqlDataAdapter da1 = new SqlDataAdapter(st1,con);
DataSet ds1 = new DataSet();
da1.Fill(ds1);
DataTable dt1 = ds1.Tables[0];
if (ds1.Tables[0].Rows.Count != 0)
{
foreach (DataRow dr1 in dt1.Rows)
{
b[j] = Convert.ToInt32(dr1["DS_ID"].ToString());
j++;
}
int cv1 = b.Max();
var2 = "DS_" + Convert.ToString(cv1 + 1);
}
else
{
var2 = "DS_1";
}
SqlCommand cmd2 = new SqlCommand("insert into Designation_Master values('"+var1+"','" + var2 + "', '" + txtDesignation.Text + "')", con);
cmd2.ExecuteNonQuery();
//<........designation end................>
SqlCommand cmd3 = new SqlCommand("insert into Position_Master values('"+var1+"','"+var2+"',@m,'"+txtHietrchy.Text+"')", con);
cmd3.Parameters.Add("@m", SqlDbType.Int).Value = m;
cmd3.ExecuteNonQuery();
m++;
//<.....position end......>
答案 0 :(得分:0)
虽然您的问题不明确,但我想在此发表一些评论。
更新查询看起来不完整。它们可能导致SQL异常。 cmd1和cmd2中的查询没有设置。第一个查询包含没有约束的“where”。 第三个查询显示为插入,您已在其中放置更新。
最重要的是,您直接在查询中放置文本框的内容。 SQL INJECTION在这里非常有用。
我的第一个建议是检查您的查询。尝试在SQL服务器上处理它们,如果它有效,就把它们带到C#。
然后,请避免使用此类内联查询。他们很危险。使用参数和存储过程。
<强>被修改强>
要使用下一个插入/更新中的一个表中生成的主键,请使用@@ identity或SCOPE_IDENTITY()。
例如,在您的情况下,
第一个查询就是这样。
INSERT INTO Department_Master(....)VALUES(....)
假设它将Identity作为主键(department_id)返回
第二个查询应该是这样的。
INSERT INTO Designation_Master(...,department_id,...)值(...,@@ identity,...)
请记住,它们都应属于相同的范围/相同的连接。