سؤال

وأنا خلق تجميع في C # لMS SQL 2005. هذا التجمع يخلق الإجراء المخزن وتشغيل استعلام ديناميكية تقوم على المعلمات التي تم تمريرها إلى الإجراء المخزن.

هل هناك وظيفة بسيطة في C # لمنع حقن SQL؟

وعلى سبيل المثال

string myQuery = "SELECT * FROM dbo.MyTable WHERE lastName = '" + injectionCheck(arg1) + "'";

وكانت الإجابة على هذا السؤال للاستعلام القياسية ... ولكن في الحالات التي لا توجد وسيلة حول إنشاء استعلام ديناميكية حقا ما يمكنني استخدامها في C # لحقن فحص؟

وعلى سبيل المثال، هذه الأعمال ربما متعود:

وباستخدامdbname؛

وSELECT * FROMtable

وفتح متماثل KEYkeyName

وغيرها

هل كانت مفيدة؟

المحلول

استخدم المعلمات ملزمة:

SqlCommand cmd = new SqlCommand(myQuery, conn);
cmd.Parameters.Add("@lastname", SqlDbType.NVarChar, 10, lastName);

نصائح أخرى

استخدم المعلمات ....

و(لقد تم نشر هذا في كثير من الأحيان بالفعل)

string myQuery = "SELECT * FROM myTable WHERE lastname = @p_name";

SqlCommand cmd = new SqlCommand();
cmd.CommandText = myQuery;
cmd.Parameters.Add ("@p_name", SqlDbType.Varchar).Value = "melp";
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top