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;
}
}
質問する
1926 次
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 に答える