سؤال

وأنا أعمل مع DataGrid قابلة للومحول التي تتوافق مع جدول MSACCESS من خلال استعلام مخزن (يسمى "UpdatePaid"، 3 PARAMATERS كما هو مبين أدناه) كما يلي:

    OleDbCommand odc = new OleDbCommand("UpdatePaid", connection);

    OleDbParameter param;

    odc.CommandType = CommandType.StoredProcedure;

    param = odc.Parameters.Add("v_iid", OleDbType.Double);
    param.SourceColumn = "I";
    param.SourceVersion = DataRowVersion.Original;

    param = odc.Parameters.Add("v_pd", OleDbType.Boolean);
    param.SourceColumn = "Paid";
    param.SourceVersion = DataRowVersion.Current;

    param = odc.Parameters.Add("v_Projected", OleDbType.Currency);
    param.SourceColumn = "ProjectedCost";
    param.SourceVersion = DataRowVersion.Current;

    odc.Prepare();

    myAdapter.UpdateCommand = odc;

    ...

    myAdapter.Update();

وأنه يعمل بشكل جيد ... ولكن الشيء الغريب حقا هو أنه لم حتى أضع في على odc.Prepare () الاتصال.
< br> وسؤالي هو بالتالي: هل أنا بحاجة للقيام بذلك في كل وقت عند العمل مع OLEDB المخزنة procs / استفسارات؟ لماذا ا؟ وأود أيضا أن مشروع آخر القادمة حيث سآخذ أن تفعل نفس الشيء مع SqlDbCommand ... لا بد لي من أن تفعل ذلك مع هؤلاء، أيضا؟

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

المحلول

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

وهكذا نحن نستعد البيان وذلك بدلا من "؟"، نحن نمر في المعلمات لديك فوق ذلك سوف تكون القيم التي تذهب في مكان أصحاب المكان.

وإعداد يوزع سلسلة لمعرفة أين يمكن المعلمات محل علامات استفهام لذلك كل ما عليك القيام به هو إدخال بيانات المعلمة وتنفيذ الأمر.

وضمن OLEDB، الاستعلامات المخزنة هي البيانات المعدة، لذلك لا بد من التحضير. أنا لم تستخدم الاستعلامات المخزنة مع SqlDB، لذلك أنا يجب أن تؤجل إلى إجابات 2 السابق.

نصائح أخرى

وأنا لا استخدامه مع SqlDbCommand. يبدو بوصفها علة لي أنه مطلوب . وينبغي أن يكون فقط <م> جميل أن يكون إذا كنت تريد الذهاب لاستدعاء إجراء عدة مرات على التوالي. ربما أكون مخطئا وهناك ملاحظة في الوثائق حول موفري أن الحب هذه الدعوة أكثر من اللازم.

هل استخدام موفر OLEDB JET؟ أو MSDASQL + JET ODBC؟

ويجب أن لا تحتاج لدعوة Prepare()، ولكن أعتقد أن هذا السائق / مزود المعالين.

وأنت بالتأكيد لا تحتاج إلى استخدام Prepare() لSystem.Data.SqlClient.

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