0

小さなデータベースに接続する小さなソフトウェアを作成しました。私はc#とwinfromsを使用してローカルSQLサーバーに接続し、データベースを表示していますdatagridviewこれまでのところ、データベースにレコードを正常に追加し、編集するレコードを選択することができました。

したがって、編集するレコードを選択し、必要なフィールドを編集するときに、編集ボタンをクリックすると、理論的には編集されたレコードが更新されます。ただし、そうすると、次のエラーに直面するようです:(図1を参照)

図1ここに画像の説明を入力

このエラーが発生する理由がわかりません。どんな助けでも大歓迎です

インターフェース: (図2)

図2ここに画像の説明を入力

編集 btnEdit を実行するコード:

  private void btnEdit_Click(object sender, EventArgs e)
        {
            try
            {
                //Open Connection
                sc.Open();
                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM myEmployees WHERE EmpID" + 
                    txtID.Text + " ", sc);
                da.Fill(dt);

                //start the editing of the selected record
                dt.Rows[0].BeginEdit();

                dt.Rows[0][1] = txtFName.Text;
                dt.Rows[0][2] = txtLName.Text;
                dt.Rows[0][3] = txtJRole.Text;
                dt.Rows[0][4] = txtEmp.Text;
                //dt.Rows[0][1] =

                //stop editing
                dt.Rows[0].EndEdit();

                //sql commandbuilder that allow saving of records
                SqlCommandBuilder cb = new SqlCommandBuilder(da);

                //update the database
                da.Update(dt);

                //close connection
                sc.Close();

                loadEmp();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                // Application.ExitThread();
            }
        }

datagridview cick イベント。これにより、編集用のレコード選択が処理されます。

private void dgEmployees_Click(object sender, EventArgs e)
        {
            try
            {


                DataTable dt = new DataTable();
                SqlDataAdapter slctRow = new SqlDataAdapter("SELECT * FROM myEmployees WHERE EmpID=" +
                Convert.ToInt16(dgEmployees.SelectedRows[0].Cells[0].Value.ToString()) + " ", sc);
                slctRow.Fill(dt);

                //display records into textboxes
                txtID.Text = dt.Rows[0][0].ToString();
                txtFName.Text = dt.Rows[0][1].ToString();
                txtLName.Text = dt.Rows[0][2].ToString();
                txtJRole.Text = dt.Rows[0][3].ToString();
                txtEmp.Text = dt.Rows[0][4].ToString();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                // Application.ExitThread();
            }

        }
4

2 に答える 2

2

パラメータ化の問題はさておき - あなたは見逃しています=:

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM myEmployees WHERE EmpID="+ 
                txtID.Text + " ", sc); // WARNING: SQL INJECTION RISK

でも; パラメータ化を検討することを強くお勧めします。たとえば、(そのテキスト ボックスに) 次のように入力するとどうなりますか。

0; delete from myEmployees --
于 2013-01-18T00:28:15.040 に答える
1

=の後EmpIDに追加してみてくださいbtnEdit_Click:

 SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM myEmployees WHERE EmpID=" + 
                    txtID.Text + " ", sc);
于 2013-01-18T00:27:38.057 に答える