更新但在button_click事件中

时间:2011-06-01 14:13:26

标签: c# sql

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......>

1 个答案:

答案 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,...)

请记住,它们都应属于相同的范围/相同的连接。