سؤال

لقد حصلنا على "إجراء مخزن" من أشخاص آر بي جي الذي يرجع ستة جداول بيانات. محاولة تسميتها من .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 ، فإنه يبحث في قائمة المكتبة للعثور على الإجراء المخزن. ينتهي بك الأمر إلى تشغيل إصدارات مختلفة من الإجراء المخزن من مكتبات مختلفة تمنحك نتائج مختلفة.

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