0

データグリッドがあり、データグリッドに2つのラジオボタン、つまり承認または拒否、およびデータグリッドに1つのボタン、つまり送信があります

私がやりたいのは、承認されたボタンが選択され、データグリッドの送信ボタンが1つの行に対してクリックされたときですその行のデータをIsactiveとしてデータベースに保存し、その行をデータグリッドから削除する必要がありますが、詳細はデータベースに保存する必要があります。

同様に、拒否ボタンが選択され、データグリッドの送信ボタンがクリックされた場合、その行のデータは Isactive を 0 としてデータベースに保存され、その行はデータグリッドから削除されます。

詳細はデータベースに保存する必要があります。

is Active はデータベースで更新されていません

誰かが私のコードで何が間違っているか教えてもらえますか? 以下は、私が試した私のC#コードです..

protected void submit(object sender, EventArgs e)
{
    // *Get the Gridview Row* //
    DataGridItem drow = (DataGridItem)(sender as Control).Parent.Parent;

    RadioButton rbpApprove = (RadioButton)drow.FindControl("rbtnapprove");
    RadioButton rbpReject = (RadioButton)drow.FindControl("rbtnreject");

    if (rbpApprove.Checked == true)
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand("Update table set IsActive= 0 where ARGID=@ARGID", conn);

        cmd.ExecuteNonQuery();
        conn.Close();        
    }
    else if (rbpReject.Checked == true)
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand("Update table set IsActive= 1 where ARGID=@ARGID", conn);
        cmd.ExecuteNonQuery();
        conn.Close();
    }


    string empid = dgi.Cells[0].Text;
    string employeename = dgi.Cells[2].Text;
    string designation = dgi.Cells[3].Text;

    conn.Open();
    SqlCommand comm = new SqlCommand("insert into [table] values (" + empid + ",'" + employeename + "','" + designation + "')", conn);
    comm.ExecuteNonQuery();
    conn.Close();        
}
4

1 に答える 1

1

最初の問題:

if (rbpApprove.Checked == true)
{
    conn.Open();
    SqlCommand cmd = new SqlCommand("Update table set IsActive= 0 where ARGID=@ARGID", conn);

    cmd.ExecuteNonQuery();
    conn.Close();        
}
else if (rbpReject.Checked == true)
{
    conn.Open();
    SqlCommand cmd = new SqlCommand("Update table set IsActive= 1 where ARGID=@ARGID", conn);
    cmd.ExecuteNonQuery();
    conn.Close();
}

このブロックは何もしていません (または、少なくとも本来あるべきことをしていません)。

このビット:where ARGID=@ARGIDデータベースで「@ARGID」のエントリをチェックしています。パラメータを追加することになっていたはずですが、忘れましたか?

cmd.Parameters.AddWithValue("@ARGID", /* The value to be checking for */ )

2番目の問題:

SqlCommand comm = new SqlCommand("insert into [T_TADA_aaprovereject_groupdirector] values (" + empid + ",'" + employeename + "','" + designation + "')", conn);

これは、 SQL インジェクションを防ぐために、他の 2 つのステートメントと同様にパラメーター化する必要があります。

したがって、次のように変更することをお勧めします。

SqlCommand comm = new SqlCommand("insert into [T_TADA_aaprovereject_groupdirector] values (@empid, @employeename, @designation)", conn);
comm.Parameters.AddWithValue(@empid, empid)
comm.Parameters.AddWithValue(@employeename, employeename)
comm.Parameters.AddWithValue(@designation, designation)
于 2013-09-23T15:48:59.897 に答える