سلوك مزود ISERIES غريب جدا
-
01-10-2019 - |
سؤال
لقد حصلنا على "إجراء مخزن" من أشخاص آر بي جي الذي يرجع ستة جداول بيانات. محاولة تسميتها من .NET (C#، 3.5) باستخدام مزود ISERIES لـ .NET (حاول استخدام كل من V5R4 و V6R1) ، نرى نتائج مختلفة بناءً على كيفية تسمية PROC المخزنة. هذه الطريقة التي نفضل القيام بذلك:
using (var dbConnection = new iDB2Connection("connectionString"))
{
dbConnection.Open();
using(var cmd = dbConnection.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "StoredProcName";
cmd.Parameters.Add(new iDB2Parameter("InParm1",
iDB2DbType.Varchar).Value = thing;
var ds = new DataSet();
var da = new iDB2DataAdapter(cmd);
da.Fill(ds);
}
}
نفعل ذلك بهذه الطريقة ، نحصل خمسة الجداول مرة أخرى في مجموعة النتائج. ومع ذلك ، إذا فعلنا هذا:
cmd.CommandType = CommandType.Text;
cmd.CommandText = "CALL StoredProcName('" + thing + "')";
نعود المتوقع ستة الجداول.
أدرك أنه لا يوجد الكثير منا آسف. NET-TO-DB2 من هنا ، لكنني آمل أن يرى شخص ما هذا من قبل.
تيا.
المحلول
انظر إلى خاصية LibraryList (وربما التسمية) لسلسلة الاتصال الخاصة بك. عند استخدام CommandType.StoredProcedure ، يمكن تنفيذ الإجراء المخزن مباشرة من مكتبة قاعدة بيانات SQL. عند استخدام commandtype.tex ، فإنه يبحث في قائمة المكتبة للعثور على الإجراء المخزن. ينتهي بك الأمر إلى تشغيل إصدارات مختلفة من الإجراء المخزن من مكتبات مختلفة تمنحك نتائج مختلفة.