سؤال

أنا أحاول بناء SQL للحصول على استعلام معلمة في C# استعلام والتي سوف تحتوي على LIKE %% الأوامر.

هنا هو ما أحاول أن تحقق (يرجى ملاحظة أن قاعدة بيانات فايربيرد)

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%?%'", TABLE, NAME);
 cmd.Parameters.AddWithValue(NAME, "JOHN");

الآن لقد حاولت كل واحد التقليب للحصول على المعلمة للعمل ، لقد حاولت ،

  • إضافة % شخصية المعلمة ،

    cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%");
    
  • أو

    cmd.Parameters.AddWithValue(NAME, "'%" + "JOHN" + "%'");
    

أنا لا يمكن أن يبدو للحصول على هذا العمل ، كيف يمكنني استخدام المعلمة عن مثل الاستعلام إلى العمل.

اقتراحات هي موضع ترحيب!

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

المحلول

لا يمكنك الحصول على المعلمات داخل سلسلة حرفية في الاستعلام.جعل كامل قيمة المعلمة ، إضافة البدل إلى السلسلة:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE ?", TABLE, NAME);
Cmd.Parameters.AddWithValue(NAME, "%" + "JOHN" + "%");

نصائح أخرى

var SQL = string.Format("SELECT * FROM {0} WHERE {1} LIKE '%' + ? + '%'", TABLE, NAME);
Cmd.CommandText = SQL;
Cmd.Parameters.Add("?", SqlDbType.VarChar, 50).Value = "JOHN";

في الماضي عندما تفعل هذا, لقد ببساطة دمج في sql, التأكد من أن استبدال علامات الاقتباس المفردة مع علامات استفهام للتعامل مع حقن sql.على سبيل المثال:

var SQL = string.format("SELECT * FROM {0} WHERE {1} LIKE '%{2}%'",
  TABLE,
  NAME,
  JOHN.Replace("'","?"));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top