PDA

View Full Version : حرفه ای: ارسال خروجی کوئری براساس پارامتر به sqlDataReader



h.alizadeh
چهارشنبه 05 مرداد 1390, 20:38 عصر
سلام،

من یک کوئری دارم بطورمثال اینطوری:


var query = db.Works.OrderBy("UserName").Where("UserId==@0 ", Convert.ToInt32(ddlUsers.SelectedValue)).Select("new(DoneTime,Job,UserName)");

بعد خب خروجی اینو میخوام بااستفاده از یک sqlDataReaderبخونم.... و بصورت دلخواه خودم در جدولی نمایش بدم...نمیخوام در گریدویو نشون بدم میخوام در <table> که خودم میسازم نشون بدم اینه که به نظرم چیزی جز SqlDataReader نیومد(چیزی دیگه ای هست؟)

حالا من اینطوری کردم:



SqlCommand cmd = newSqlCommand(query.ToString(), db1);
SqlDataReader dr;
dr = cmd.ExecuteReader();


اما در خط بالایی یعنی
dr = cmd.ExecuteReader();
خطا میده:

Must declare the scalar variable "@p0".
و مقدار متغیرquery در این لحظه زمان اجرا، اینه:


SELECT [t0].[DoneTime], [t1].[Job], [t2].[UserName]
FROM [dbo].[Work] AS [t0]
INNER JOIN [dbo].[Job] AS [t1] ON ([t1].[JobId] = [t0].[JobId]) AND ([t1].[UserId] = [t0].[UserId])
INNER JOIN [dbo].[Users] AS [t2] ON [t2].[UserId] = [t1].[UserId]
WHERE [t0].[UserId] = @p0
ORDER BY [t2].[UserName]


خب من باید چکار کنم؟ چه موقع این مقدار @p0 مقدارش همراه متغیر کوئری قرار می گیره؟
پیشنهادی دارید ؟

ممنون.

البته من میتونم مشکله بالا رو با دادن مقدار پارامتر ورودی به sqlcommandحل کنم ولی یک جوری دوباره کاری میشه چون من در خود متغیر کوئری مقدار پارامتر رو دادم...

و اینکه من در اصل کوئریم این شکلی نیست یعنی قسمت where ام متغیره تعداد پارامترهاش یعنی ممکنه مثلا براساس چندین پارامتر ورودی باشه ممکنه براساس یک پارامتر باشه که در زمان اجرا تعیین میشه بهرحال مشکل اون هم دقیقا بهمین صورت این مثالی که زدم هست... و اینکه اگه من بخوام مقدار پارامترها رو مجدد به sqlcommand بوسیله دستور مثلاً

cmd.Parameters.Add("@p0", 1);
بدم خیلی دیگه پیچیده میشه باتوجه به اینکه قسمت where ام متغیره ...

البته من متغیر queryرو اگه در جا به یک گریدویو نسبت بدم قشنگ نشون میده و ارروری نمیده ولی الان که بصورت بالا عمل میکنم این مشکل رو دارم....

h.alizadeh
پنج شنبه 06 مرداد 1390, 14:55 عصر
مشكلم رو با استفاده از IDbCommand حل كردم مرسي