-1
public partial class HardwareInformation : BaseForm
{
    string sWhere = "";
    public HardwareInformation()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        SqlConnection objConn1 = new SqlConnection("Data Source=192.168.0.203;Initial Catalog=costing;User ID=sa;Password=Spareage@123");
        if ( searchtextbox.Text.Trim() != "" )
        {
            sWhere = "Where  Srno  '" + searchtextbox.Text;      
        }

        SqlDataAdapter objAdapter = new SqlDataAdapter(@"Select distinct [Srno] ,[Employee Name] ,  [Department] ,  [Thin Client] , [Desktop] , [Lcd] , [Moniter] , [Printer] , [Ups]   from  [dbo].[HardwareDetail] " + sWhere + "", objConn1);
        DataTable objTable = new DataTable();
        objAdapter.Fill(objTable);
        dataGridView1.DataSource = objTable;
        dataGridView1.Columns[0].Width = 25;
        for (int i = 1; i < dataGridView1.Columns.Count; i++)
        {
            dataGridView1.Columns[i].ReadOnly = true;
        }
    }
4

3 に答える 3

2

使用する

"Where Srno = '" + searchtextbox.Text + "'";

TextBox テキストの後にシングル クォーテーション マークを付けて閉じます=Srno

最後に使用した SqlDataAdapter が作成された行

 "[Ups] from [dbo].[HardwareDetail] " + sWhere, objConn1);

ところで、SQLInjection に注意してください。

于 2012-05-24T12:02:24.587 に答える
1

コードはSQLインジェクション攻撃に対して脆弱です。SQLをサニタイズせずに、ユーザー入力をSQLに直接挿入しないでください。あなたは本当にパラメータ化されたクエリに変更する必要があります:

SqlDataAdapter objAdapter = new SqlDataAdapter(@"Select distinct [Srno] ,[Employee Name] ,  [Department] ,  [Thin Client] , [Desktop] , [Lcd] , [Moniter] , [Printer] , [Ups]   from  [dbo].[HardwareDetail] WHERE Srno = @srno", objConn1);

// Change the length and dbtype to match your needs
objAdapter.Parameters.Add("@srno", SqlDbType.NChar, 15, searchtextbox.Text);

DataTable objTable = new DataTable();
objAdapter.Fill(objTable); 

これにより、インジェクションの脆弱性から解放され、引用符やその他の特殊文字をエスケープする必要もなくなります。

于 2012-05-24T12:20:00.947 に答える
1

テキスト ボックスのテキストの後に = 記号がなく、終了引用符がありません。したがって、そうあるべきです

"Where  Srno = '" + searchtextbox.Text +"'";
于 2012-05-24T12:04:41.887 に答える