// // Masalah menggunakan SQLCommand.Parameters - Geeks Portal

Masalah menggunakan SQLCommand.Parameters

Last post 03-12-2009 23:13 by antonmaju. 4 replies.
Page 1 of 1 (5 items)
Sort Posts: Previous Next
  • 03-09-2009 15:22

    • adhitomo
    • Not Ranked
    • Joined on 03-08-2009
    • Posts 3
    • Points 60

    Masalah menggunakan SQLCommand.Parameters

    Hallo semua, salam kenal Saya sedang mengembangkan aplikasi Client Server sederhana, menggunakan C# DataGridView dan terkoneksi ke SQL Server. Dibawah ini adalah 2 jenis kode yang di gunakan, kode pertama berfungsi dengan baik, sedangkan kode kedua tidak berhasil mengembalikan result untuk di tampilkan di DataGridView ( data kosong ).
    
    ///---- start kode pertama ----
    /// kode yang berhasil di jalankan, menggunakan string.format
    
    /*
                    string selectString = string.Format("SELECT employee.BarcodeID as 'Staff ID', " +
                        "employee.FirstName as 'First Name', " +
                        "employee.LastName as 'Last Name', " +
                        "employee.Preferred as 'Prefered', " +
                        "h_employee.Emp_AktifYN as 'Active' " +
                        "FROM employee, h_employee " +
                        "WHERE employee.BarcodeID=h_employee.Emp_ID " +
                        "AND h_employee.Emp_AktifYN='Y' " +
                        "AND employee.{0} like '%{1}%' " +
                        "ORDER BY employee.BarcodeID ASC", filterCategory,txtFilter.Text );
    
                    SqlCommand mySqlCommand = new SqlCommand(selectString, mySqlConnection);
    */
    ///---- end kode pertama ----
    
    
    ///---- start kode kedua ----
    ///kode yang di jalankan menggunakan SQLCommand.Parameters
    
                    string selectString = "SELECT employee.BarcodeID as 'Staff ID', " +
                        "employee.FirstName as 'First Name', " +
                        "employee.LastName as 'Last Name', " +
                        "employee.Preferred as 'Prefered', " +
                        "h_employee.Emp_AktifYN as 'Active' " +
                        "FROM employee, h_employee " +
                        "WHERE employee.BarcodeID=h_employee.Emp_ID " +
                        "AND h_employee.Emp_AktifYN='Y' " +
                        "AND @filterCategory like '@filterText' " +
                        "ORDER BY employee.BarcodeID ASC";
    
                    SqlCommand mySqlCommand = new SqlCommand(selectString, mySqlConnection);
                    mySqlCommand.Parameters.Add("@filterCategory", SqlDbType.VarChar,50);
                    mySqlCommand.Parameters.Add("@filterText", SqlDbType.VarChar,50);
    
                    mySqlCommand.Parameters["@filterCategory"].Value = "employee." + filterCategory;
                    mySqlCommand.Parameters["@filterText"].Value = "%" + txtFilter.Text + "%";
    
    ///---- end kode kedua ----
    
                    SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
                    mySqlDataAdapter.SelectCommand = mySqlCommand;
                    DataSet myDataSet = new DataSet();
                    mySqlConnection.Open();
    
                    string dataTableName = "Type";
                    mySqlDataAdapter.Fill(myDataSet, dataTableName);
                    
                    DataTable myDataTable = myDataSet.Tables[dataTableName];
    
                    //BindingSource to sync DataTable and DataGridView
                    BindingSource bSource = new BindingSource();
    
                    //set the BindingSource DataSource
                    bSource.DataSource = myDataTable;
    
                    //set the DataGridView DataSource
                    dataGridView1.DataSource = bSource;
                    mySqlConnection.Close();
    
    
    Apakah kode kedua harus di ubah cara binding datanya, dan apa yang harus di tambahkan? Kemudian apakah dengan memakai String.Format dan atau SQLCommand.parameters telah cukup untuk menghalangi SQL inject? Terima kasih atas masukannya.
    Filed under: ,
    • Post Points: 50
  • 03-12-2009 23:13 In reply to

    • antonmaju
    • Top 50 Contributor
    • Joined on 11-28-2007
    • Malang
    • Posts 145
    • Points 2,310

    Re: Masalah menggunakan SQLCommand.Parameters

    Hi adhitomo,

     Kalau kasusnya seperti di atas ,kode kedua salah karena @filterCategory bukanlah parameter tapi cuma bagian dari sql text, oleh karena itu pertama 

    string selectString = string.Format("SELECT employee.BarcodeID as 'Staff ID', " +
                        "employee.FirstName as 'First Name', " +
                        "employee.LastName as 'Last Name', " +
                        "employee.Preferred as 'Prefered', " +
                        "h_employee.Emp_AktifYN as 'Active' " +
                        "FROM employee, h_employee " +
                        "WHERE employee.BarcodeID=h_employee.Emp_ID " +
                        "AND h_employee.Emp_AktifYN='Y' " +
                        "AND {0} like '@filterText' " +
                        "ORDER BY employee.BarcodeID ASC","employee." + filterCategory);

    Lalu tambahkan parameternya seperti kode di bawahnya kecuali hilangkan parameter yg untuk @filterCategorty. Btw, kalo string sqlnya panjang dan terputus2 mungkin bisa dipertimbangkan pake StringBuilder.

    Mengenai amannya, kode dengan SqlParameter lebih aman daripada sql text yang parameternya diinput via string.Format

    Semoga membantu,

    Anton

     

     

    • Post Points: 5
  • 03-12-2009 23:18 In reply to

    • antonmaju
    • Top 50 Contributor
    • Joined on 11-28-2007
    • Malang
    • Posts 145
    • Points 2,310

    Re: Masalah menggunakan SQLCommand.Parameters

    Hi adhitomo,

    Kode kedua salah karena @filterCategory bukan parameter, oleh karena itu pertama pakai string.Format pada sql textnya:

     string selectString = string.Format("SELECT employee.BarcodeID as 'Staff ID', " +
                        "employee.FirstName as 'First Name', " +
                        "employee.LastName as 'Last Name', " +
                        "employee.Preferred as 'Prefered', " +
                        "h_employee.Emp_AktifYN as 'Active' " +
                        "FROM employee, h_employee " +
                        "WHERE employee.BarcodeID=h_employee.Emp_ID " +
                        "AND h_employee.Emp_AktifYN='Y' " +
                        "AND {0} like '@filterText' " +
                        "ORDER BY employee.BarcodeID ASC","employee." + filterCategory);

    Lalu tambahkan SqlParameter lanjutannya kecuali @filterCategory.

    Btw, kalau sql textnya panjang mungkin  bisa dipertimbangkan pakai StringBuilder.

    Mengenai amannya, SqlParameter lebih aman daripada input parameter langsung via string.Format

    Semoga membantu,

    Anton

    • Post Points: 5
  • 03-17-2009 16:00 In reply to

    Re: Masalah menggunakan SQLCommand.Parameters

    adhitomo:
    AND @filterCategory like '@filterText'
     

    Hi adhitomo,

    jangan pakai quote mark around parameter.

    ubah menjadi: AND @filterCategory like @filterText

     

    SqlFormat tetap prone terhadap SQL Injection attack.

    SqlParameter adalah cara yang benar untuk menghalangin attack semacam ini.

    Ronald Widha
    ronaldwidha.net/askbobo
    follow me on twitter
    • Post Points: 20
  • 03-22-2009 0:15 In reply to

    • adhitomo
    • Not Ranked
    • Joined on 03-08-2009
    • Posts 3
    • Points 60

    Re: Masalah menggunakan SQLCommand.Parameters

    Ok. Kode nya sudah di perbaiki dan sudah berfungsi. Thanks again
    • Post Points: 5
Page 1 of 1 (5 items)