PDA

View Full Version : سوال: چرا این پروسیجر در C# خروجی ندارد اما در Sql دارد؟



hahaie
چهارشنبه 14 بهمن 1394, 09:45 صبح
سلام.
این پروسیجر که در زیر گذاشتم توی sql خروجی داره ولی وقتی در سی شارپ به دیتاسورس گرید میدم توی گرید هیچ خروجی ای ندارم.
چرا؟


ALTER Procedure [dbo].[Prc_TBMonPerfSecNBase_BlnForm](@P_Year varchar(4),@P_Month varchar(2))
As
Declare @Cols varchar(max),
@Sql varchar(max)

Select @Cols=Stuff((Select ',''''AS ' + quotename(Sec_Name)+',''''AS '+quotename(Sec_Code)
From Tb_Section
Where Sec_Base = 1
For xml path('')), 1, 1, '')
Set @Sql = 'Select Sec_Name,
Sec_Code,'
+@P_Year+'[سال]'+
','
+@P_Month+'[ماه]'+
','
+ @Cols
+ 'From Tb_Section Where Sec_Base = 0 Order by Sec_Name'

exec (@Sql)

hahaie
چهارشنبه 14 بهمن 1394, 18:18 عصر
سوال رو سادش میکنم.
فرض کنید یه جدول داریم بنام جدول قسمتها. با 3 فیلد name،Code و Base.
پروسیجر زیر رو که خیلی قشنگ هستش مینویسم:


Create Procedure test as
Declare @Cols varchar(max),
@Sql varchar(max)
Set @Cols=stuff((Select ',''''AS ' + quotename(Name)--+',''''AS '+quotename(Sec_Code)
From Tb_Section
Where Base = 1
For xml path('')), 1, 1, '');

Set @Sql = 'Select Name,'
+ @Cols
+ 'From Tb_Section Where Base = 0 Order by Name'
exec (@Sql)

این خروجی رو توی sql داره:
138801
حالا میام و این پروسیجر رو توی Vs از طریق Linq To Sql میارم و به دیتاسورس گرید میدم ولی ستون ها و ردیف های توی گرید نشون داده نمیشه.
ضمن اینکه من با همین روش پروسیجرهای ساده تری رو تونستم به گرید بدم و مشکلی نداشتم حالا اینکه چرا این پروسیجر جواب نمیده نمیدونم!!
دوستان کسی میتونه کمک کنه؟

hahaie
چهارشنبه 14 بهمن 1394, 19:19 عصر
چون جواب برام خیلی مهم بود توی لینک زیر کاملتر مطرح کردم.دوستان اگه میشه لطف کنن لینک زیر رو ببینند شاید تونستین کمک کنید:ممنون
http://www.c-sharpcorner.com/forums/my-procedure-not-have-output-in-c-sharp-for-datasoure-gridview

zayens
پنج شنبه 15 بهمن 1394, 11:40 صبح
اون کدتون که توی سی شارپه رو هم بزارید

hahaie
پنج شنبه 15 بهمن 1394, 15:02 عصر
کد خاصی توی سی شارپ ندارم،ضمن اینکه توی فرمای دیگه هم از همین روش استفاده کردم مشکلی نداشتم هر چی هست اینکه سی شارپ نمیتونه اون کدهای sql رو پیادش کنه:


DataClasses1DataContext da = new DataClasses1DataContext();
dataGridView1.DataSource = da.test();

توی لینکی که بالا گذاشتم تغییراتی توی پروسیجر برای راحت تر شدن صورت سوال دادم ولی متاسفانه هنوز کسی راه حل رو نمیدونه.
خیلی نیازش دارم ممنون میشم دوستان کمک کنن

hahaie
پنج شنبه 15 بهمن 1394, 16:44 عصر
شاید اینطور بگم خیلی ساده تر بشه:
ببینید کد زیر برای گرید ویو خروجی داره:


ALTER Procedure [dbo].[test3] as
Declare @Cols varchar(max),
@Sql varchar(max)
Set @Cols=('''''AS [a]');
print @cols
Set @sql=' select 1 as[one], ' + @Cols
exec (@Sql)

اما کد زیر که فقط توی یه select با کد بالا تفاوت داره و هیچ تفاوتی توی خروجی sql ایجاد نمیکنه توی سی شارپ خروجی نداره:


ALTER Procedure [dbo].[test3] as
Declare @Cols varchar(max),
@Sql varchar(max)
Set @Cols=(Select'''''AS [a]');
print @cols
Set @sql=' select 1 as[one], ' + @Cols
exec (@Sql)

hahaie
شنبه 17 بهمن 1394, 10:53 صبح
please help me :لبخندساده: