Обновление но в событии button_click - PullRequest
0 голосов
/ 01 июня 2011
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();

Я хочу обновить три таблицы на основе первичного ключа, каждая таблица имеет этот первичный ключ как поддельный ключ. Есть три стола

это код автогенерации первичного ключа ....

    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 голосов
/ 01 июня 2011

Хотя ваш вопрос неясен, я хотел бы оставить здесь несколько комментариев.

Запросы на обновление выглядят неполными.Они могут привести к исключению SQL.Запросы в cmd1 и cmd2 не установлены.Первый запрос содержит «где» без ограничений.Третий запрос выглядит как вставка, и вы поместили в него обновление.

Прежде всего, вы непосредственно размещаете содержимое текстового поля в своем запросе.SQL INJECTION очень возможен здесь.

Мой первый совет - просмотрите ваши запросы.Попробуйте поработать с ними на SQL-сервере и, если он работает, перенесите их на C #.

И затем, пожалуйста, избегайте таких встроенных запросов.Они опасны.Используйте параметры и хранимые процедуры.

Отредактировано

Чтобы использовать первичный ключ, сгенерированный в одной таблице при следующей вставке / обновлении, используйте @@ identity или SCOPE_IDENTITY ().

Например, в вашем случае

первый запрос будет выглядеть следующим образом.

INSERT INTO Department_Master (....) VALUES (....)

Допустим, он возвращает идентификатор в качестве первичного ключа (отдел_ид)

второй запрос должен выглядеть следующим образом.

INSERT INTO Designation_Master (..., Department_id ,...) Значения (..., @@ identity, ...)

Помните, что все они должны попадать в одну область видимости / одно и то же соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...