سؤال

أحاول تنفيذ استعلام SQL كجهاز تسجيل دخول آخر باستخدام أمر "تنفيذ ك". أنا أستخدم LinQ إلى SQL، لذلك لقد قمت بإنشاء فئة سياق بيانات وأنا أستخدم طريقة Executequery الخاصة بتشغيل الأمر "تنفيذ ك" SQL SQL. ثم اتصل بأمر LINQ إلى SQL الناجح. ومع ذلك، فشل كل استعلام لاحق مع الخطأ التالي:

حدث خطأ هام في الأمر الحالي. النتائج، إن وجدت، وينبغي التخلص منها.

فيما يلي مقتطف التعليمات البرمجية التي جربتها:

SummaryDataContext summary = new SummaryDataContext();
summary.ExecuteQuery<CustomPostResult>(@"Execute as Login='Titan\Administrator'");
var test = summary.Customers.First();
var test2 = summary.Products.ToList();

بغض النظر عن الاستعلام الذي قمت بتشغيله في الاستعلام الثاني الذي أتلقى رسالة الخطأ من الأعلى. سيكون موضع تقدير أي مساعدة.

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

المحلول

تمكنت من الدخول في هذه المشكلة في طلبي عن طريق تنفيذ الاستعلام باستخدام فصول ADO.NET.

SqlCommand cmd = new SqlCommand("EXECUTE AS USER = 'operator'");
cmd.Connection = dc.Connection as SqlConnection;
cmd.Connection.Open();
cmd.ExecuteNonQuery();

// do the rest of the queries using linq to sql

نصائح أخرى

ربما تكون قد قضت بالفعل هذا، لكن العمل المحتمل المحتمل سيكون هو ببساطة إنشاء سياق البيانات بسلسلة اتصال مختلفة.

لتحرير سلسلة الاتصال، يمكنك تعيين خاصية DataContext.connection.connectionString. لقد فعلت ذلك من قبل في الطريقة الجزئية oncreated ()، والتي يتم استدعاؤها عند إنشاء سياق البيانات. لم أختبر لكنني أعتقد أنه يمكنك أيضا القيام به:

YourDataContext dc = new YourDataContext();
dc.Connection.ConnectionString = "connection string here";

إليك مقال يصف هذا أيضا - http://www.mha.dk/post/setting-datacontext-connection-string-runtime.aspx.

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

 SqlCommand cmd = new SqlCommand("EXECUTE AS USER = 'domain\\user';");
 OSSDBDataContext dc = new OSSDBDataContext();
 cmd.Connection = dc.Connection as SqlConnection;
 cmd.Connection.Open();
 cmd.ExecuteNonQuery();

 //Execute stored procedure code goes here

 SqlCommand cmd2 = new SqlCommand("REVERT;");
 cmd2.Connection = dc.Connection as SqlConnection;
 cmd2.ExecuteNonQuery();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top