استخدام المعلمات في خدمات تقارير MS (SQL Server 2008) مقابل مصدر بيانات ODBC

StackOverflow https://stackoverflow.com/questions/9275

سؤال

أكتب تقريرًا في Visual Studio يأخذ معلمة إدخال المستخدم ويعمل على مصدر بيانات ODBC.أرغب في كتابة الاستعلام يدويًا وجعل خدمات التقارير تستبدل جزءًا من جملة المكان بقيمة المعلمة قبل إرسالها إلى قاعدة البيانات.ويبدو أن ما يحدث هو أن @parmName أفترض أن الاستبدال سيتم إرساله بالفعل كجزء من عبارة SQL.هل أفتقد إعداد التكوين في مكان ما أم أن هذا ببساطة غير ممكن؟

لا أستخدم خيار التصفية في الأداة لأن هذا يبدو أنه يعيد مجموعة البيانات الكاملة من قاعدة البيانات ويقوم بالتصفية على SQL Server.

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

المحلول

يبدو أنك ستحتاج إلى التعامل مع عبارة SQL كتعبير.على سبيل المثال:

="Select col1, col2 from table 1 Where col3 = " & Parameters!Param1.Value 

إذا كانت جملة Where عبارة عن سلسلة، فستحتاج إلى القيام بما يلي:

="Select col1, col2 from table 1 Where col3 = '" & Parameters!Param1.Value & "'"

مهم:لا تستخدم فواصل الأسطر في تعبير SQL الخاص بك.إذا قمت بذلك سوف تحصل على خطأ.

هلا بالعودة إذا كنت بحاجة إلى مزيد من المساعدة.

نصائح أخرى

ألا تستخدم ODBC القديم "؟" بناء الجملة للمعلمات؟جرب هذا:

select col1, col2 from table1 where col3 = ?

يصبح ترتيب المعلمات مهمًا بعد ذلك، ولكنه أقل عرضة لحقن SQL من مجرد إلحاق قيمة المعلمة.

واجه نفس المشكلة أثناء محاولة الاستعلام عن قاعدة بيانات الوصول عبر ODBC.

استفساري الأصلي: SELECT A.1 FROM A WHERE A.1 = @parameter أدى إلى خطأ.تم التغيير إلى: SELECT A.1 FROM A WHERE A.1 = ?.

يتعين عليك بعد ذلك تعيين معلمة الاستعلام باستخدام معلمة التقرير الخاصة بك.

أنا في حيرة من أمري بشأن هذا السؤال، إذا كنت تبحث عن استخدام بسيط للمعلمات، فإن الترميز هو:*paramName* ومع ذلك، إذا كنت ترغب في تغيير هيكليًا WHERE جملة (كما تفعل في sql+ باستخدام؟) فيجب عليك حقًا استخدام تعليمات برمجية مخصصة داخل التقرير لتحديد دالة تُرجع SQL المطلوب للاستعلام.

لسوء الحظ، عند استخدام تعليمات برمجية مخصصة، لا يمكن الرجوع إلى المعلمات مباشرة في الاستعلام الذي تم إنشاؤه ولكن يجب أن تكون هناك قيم متسلسلة في السلسلة الناتجة، وبالتالي تقديم إمكانية SQL حقنة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top