سؤال

يتم استدعاء الإجراء المخزن الخاص بي على النحو التالي من حزمة SQL instegartion داخل SQL Server 2005

تنفيذي؟= Validation.PopulateFaultsFileDetails؟، 0

على الرغم من أنني لست متأكدا ما؟وسائل

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

المحلول

عند استدعاء عبارة SQL هذه، سيتم استبدال علامتي الاستفهام (؟).سيتم استبدال الأول بمتغير سيحصل على القيمة المرجعة للإجراء المخزن.سيتم استبدال الثانية بقيمة سيتم تمريرها إلى الإجراء المخزن.سيبدو رمز استخدام هذا البيان كما يلي (الكود الكاذب):

dim result
SQL = "EXEC ? = Validation.PopulateFaultsFileDetails ? , 0"
SQL.execute(result, 99)    // pass in 99 to the stored proc
debug.print result

يمنحك هذا 3 مزايا:

  1. يمكنك إعادة استخدام نفس الجزء من SQL بقيم مختلفة
  2. يمكنك التقاط القيمة المرجعة واختبار النجاح/الخطأ
  3. إذا كانت القيمة التي تقوم بتمريرها عبارة عن سلسلة، فيجب أن يتم تهريبها بشكل صحيح لك، مما يقلل من مخاطر ثغرات حقن SQL في تطبيقك.

نصائح أخرى

ال ؟لتقف على متغير، على وجه الدقة، معلمة.الأول ؟هي القيمة المرجعة للإجراء المخزن والثانية هي المعلمة الأولى للإجراء المخزن

شكرا وأنا أقدر الجواب.

لقد تمكنت من تنفيذ الإجراء المخزن بنجاح باستخدام DEVALTSFILENAME VARCHAR DEVALTSFILEID int exectfaultsfileId = Validation.populateFaultSfileDetails 'samemonth test.txt'

ولكن عندما أقوم بتمرير معلمة الإدخال كـ "SameMonth Test.txt" في حزمة التكامل، تظهر لي رسالة خطأ تقول:

لا يمكن أن تكون أسماء المعلمات عبارة عن خليط من الأنواع الترتيبية والمسمى.".أسباب الفشل المحتملة:مشاكل في الاستعلام، أو عدم تعيين خاصية "ResultSet" بشكل صحيح، أو عدم تعيين المعلمات بشكل صحيح، أو لم يتم إنشاء الاتصال بشكل صحيح.

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