PDA

View Full Version : سوال: ساخت استورپراسیجر در سی شارپ



abbashayali
شنبه 17 فروردین 1398, 15:06 عصر
باسلام

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


IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'dbo.TTMS_Kharid')
DROP PROCEDURE dbo.TTMS_Kharid


USE [IFS_803]
GO
/****** Object: StoredProcedure [dbo].[TTMS_Kharid] Script Date: 01/17/1398 02:51:51 ب.ظ ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create PROCEDURE [dbo].[TTMS_Kharid]


@Fpid int,
@SCODE INT
AS
BEGIN


select ROW_NUMBER()over(order by Price) as Radif,* from
(select * from
(select 0 as Sarjam,0 as IsHagholAmalKari,12 as KalaType
,(select Name from __Merchandise__ where id = b.MerchandiseId and FPId=@Fpid)KalaKhadamatName,0 as KalaCode,case when a.FactorType in (0,10) then 0 else -1 end as BargashtType,
b.AuxAmount as Price,(b.VTax-b.VCharge)as MaliatArzeshAfzoodeh,b.VCharge as AvarezArzeshAfzoodeh,'0' as SayerAvarez, '0' as TakhfifPrice,


MType+1 as HCForoushandeTypeCode,ZipCode as ForoushandePostCode,'0' as ForoushandePerCityCode,PhoneNo as ForoushandeTell,Address as ForoushandeAddress
,Name as ForoushandeName,Family as ForoushandeLastNameSherkatName,EcCode as ForoushandeEconomicNO,c.TRes as ForoushandeNationalCode
,5 as HCForoushandeType1Code,cast((select code from __AccGeo__ where id=Province)as bigint) StateCode
,cast((select code from __AccGeo__ where id=Division)as bigint) CityCode,0 as ArzType,0 as Arz_Price,0 as Arz_MaliatArzeshAfzoodeh,0 as Arz_AvarezArzeshAfzoodeh
,0 as Arz_SayerAvarez,0 as Arz_TakhfifPrice,0 as ArzBarabari_Price,0 as ArzBarabari_TakhfifPrice,0 as ArzBarabari_MaliatArzeshAfzoodeh,0 as ArzBarabari_AvarezArzeshAfzoodeh,0 as ArzBarabari_SayerAvarez,0 as MoadelRialiPrice,0 as MoadelRialiTakhfifPrice,
0 as MoadelRialiMaliatArzeshAfzoodeh,0 as MoadelRialiAvarezArzeshAfzoodeh,0 as MoadelRialiSayerAvarez,
FactorNo,dbo.__MiladiToShamsi__(a.SPDate) as FactorDate,cast(SanadNo as bigint) as SanadNo ,SanadDate,'0' as IsSent
from __SPFactor__ a
inner join __SPArticle__ b
on a.Id=b.SPId
and a.FPId=b.FPId
and a.FPId=@Fpid
and a.FactorType in (0,2,10)
inner join __Customer__ c
on a.CustomerId=c.Id
inner join
(select * from
(select a.InvSPId,b.SanadNo,dbo.__MiladiToShamsi__(b.TDate ) SanadDate,
case when SCode in (1,2,3,4) then '1'
when SCode in (5,6,7) then '2'
when SCode in (8,9,10) then '3'
else '4' end as Scode
from __Article__ a
inner join __Transaction__ b
on a.TransId=b.Id
and a.FPId=b.FPId
and b.Committed<>0
and b.SCode<>0
where b.FPId=@Fpid
and a.InvSPId<>0)T
group by InvSPId,SanadNo,SanadDate,Scode)TT
on a.Id=tt.InvSPId
and tt.Scode=@Scode)t
union all
select -1,0,'','',0,0, (select sum(debit) from
(select sum(Debit)Debit,
case when SCode in (1,2,3,4) then '1'
when SCode in (5,6,7) then '2'
when SCode in (8,9,10) then '3'
else '4' end as Scode
from __Article__ a
inner join __Transaction__ b
on a.TransId=b.Id
and a.FPId=b.FPId
where a.FPId=@Fpid
and a.InvMTId<>0
and a.InvSPId=0
and left(a.AccountId,2)in ('81','22')
group by SCode)t
where Scode=@Scode),cast((select round((sum(debit*6/100)),0) from
(select sum(Debit)Debit,
case when SCode in (1,2,3,4) then '1'
when SCode in (5,6,7) then '2'
when SCode in (8,9,10) then '3'
else '4' end as Scode
from __Article__ a
inner join __Transaction__ b
on a.TransId=b.Id
and a.FPId=b.FPId
where a.FPId=@Fpid
and a.InvMTId<>0
and a.InvSPId=0
and left(a.AccountId,2)in ('81','22')
group by SCode)t
where Scode=@Scode)as nvarchar),cast((select round((sum(debit*3/100)),0) from
(select sum(Debit)Debit,
case when SCode in (1,2,3,4) then '1'
when SCode in (5,6,7) then '2'
when SCode in (8,9,10) then '3'
else '4' end as Scode
from __Article__ a
inner join __Transaction__ b
on a.TransId=b.Id
and a.FPId=b.FPId
where a.FPId=@Fpid
and a.InvMTId<>0
and a.InvSPId=0
and left(a.AccountId,2)in ('81','22')
group by SCode)t
where Scode=@Scode)as nvarchar),'0','0','','','','','','','','','','7',' ','','','','','','','','','','','','','','','','', '','','','0','','0'
)TT
end

davidrobert
دوشنبه 19 فروردین 1398, 15:24 عصر
سلام و خسته نباشید دوست عزیز بنده یک نمونه با پروسیجر نویسی نوشتم دستورات پروسیجر هم داخلش هستش این پروژه بنده هستش http://barnamenevis.org/showthread.php?554595-%D8%AF%D9%81%D8%AA%D8%B1-%D8%AA%D9%84%D9%81%D9%86-%D8%A8%D8%A7-%D8%A7%D9%85%DA%A9%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D9%88-%D9%87%D9%85%DA%86%D9%86%DB%8C%D9%86-%D8%A7%D9%85%DA%A9%D8%A7%D9%86-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%BE%DB%8C%D8%A7%D9%85%DA%A9-%D9%88-%DA%A9%D8%A7%D9%87%D8%B4-%D8%B4%D8%AF%DB%8C%D8%AF-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C میتوانید مشاهده کنید ارتباط برنامه با پروسیجر به صورت خیلی راحت و کدنویسی دیتابیس با دو دستور پرامتری حتی پروژه های بزرگ خلاصه شده

saeidfar
دوشنبه 19 فروردین 1398, 23:30 عصر
همه این دستورات با linq قابل اجرا هست،
البته میشه ایجوری هم نوشت:
public void DoCommand(string ole)
{
con = new OleDbConnection();
//for sql
//con=new SqlConnection();

con.ConnectionString = Program.connect;

//for sql
//con.ConnectionString="server=(local);trusted_connection=yes;database=tel ephon;";

cmd = new OleDbCommand();

//for sql
//cmd=new SqlCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = ole;
cmd.ExecuteNonQuery();
con.Close();
}

davidrobert
سه شنبه 20 فروردین 1398, 13:19 عصر
همه این دستورات با linq قابل اجرا هست،
البته میشه ایجوری هم نوشت:
public void DoCommand(string ole)
{
con = new OleDbConnection();
//for sql
//con=new SqlConnection();

con.ConnectionString = Program.connect;

//for sql
//con.ConnectionString="server=(local);trusted_connection=yes;database=tel ephon;";

cmd = new OleDbCommand();

//for sql
//cmd=new SqlCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = ole;
cmd.ExecuteNonQuery();
con.Close();
}

این OleDbConnection که شما قرار دادید برای اکسس هستش و برای sql server نیست و همین طور اون سورس فایل بنده با پروسیجر هستش که کنویسی حرفه ای بهش اضافه کردم که شما با یک بار نوشتن دستور دستورات دیتابیس دیگر نیاز به نوشتن دستورات دیتابیس نباشه و فقط مقدار پرامتر ها رو بهش ارسال میکنید اون خودش متوجه میشه هر پرامتر برای کدام پروسیجر هستش و یک پروسیجر چندین کوئری وارد میکنیم و موقع صدا زدن خودش متوجه میشه ما کدام کوئری لازم دارم و میره همون کوئری رو برای مون میاره

abbashayali
چهارشنبه 21 فروردین 1398, 20:28 عصر
باسلام
میشه بفرمایید با لینک چطور باید کدشو بزنم؟؟؟؟

davidrobert
چهارشنبه 21 فروردین 1398, 22:55 عصر
دوست عزیز این فکر نکنم به این راحتی بتوانید تبدیل به Linq کنید و فکر نکنم امکانش باشه دستور پروسیجر تو linq صدا کنید چون تو ADO معلوم هستش چطور دستور پروسیجر صدا کنید ولی داخل لینکو نه این بخواهید معادل linq بنویسی یک ابزار هستش کد ADO به Linq تبدیل میکنه ولی دنگ فنگش خیلی هستش و مطمئن باش با این شرط های تو در توی ADO بهتره برید سمت ADO اون فایل بنده هم کمکت میکنه تا پروسیجر بنویسی ولی لینکو شرمنده کوئری های ساده تو در تو linq عذیت میکنه وای به حال این نوع کوئری شما

mr.sirwan
چهارشنبه 21 فروردین 1398, 23:45 عصر
دوست عزیز ساختن ستورپروسیجر مثل اجرای دستورات ADO هست، کل این دستور رو به پراپرتی CommandText نسبت میدین و اجرا میگیرین، این کار رو توی ایونت لود فرم لاگین یا اولین فرم نرم افزارتون قرار بدین و برای حذف هم فقط کافیه دستور حذف ستورپروسیجر رو توی ایونت FormClosing قرار بدین، دستور حذف یک ستورپروسیجر به این شکله:
DROP PROCEDURE ProcedureName
GO

saeidfar
پنج شنبه 22 فروردین 1398, 23:50 عصر
من با همین به sql وصل شدم بدون هیچ مشکلی:
Program.connect; کانکشن استریگ رو اونجابه sql تعریف کردم

saeidfar
پنج شنبه 22 فروردین 1398, 23:54 عصر
باید الگوریتم رو براخودتون دربیارید.
تمامی دستورات sql با linq قابل پیاده سازی هستن.