PDA

View Full Version : بازم در مورد SP



tc1000
چهارشنبه 21 فروردین 1387, 12:39 عصر
سلام
من یه سئوال در تالار SQL مطرح کردم و به نتیجه رسیدم
این هم کدشت

Select ((Select Sum(Case When Total < 100 Then 0 Else Total End)From Table1)+
(Select Sum(Case When Which_Field = 1 Then Price1 When Which_Field = 2
Then Price2 Else Price3 End)From Table2)+ (Select Count(*) From Table3))

حالا میخوام با استفاده از دانت نت جوابی که از کئری میگیرم رو ی صفحه نمایش بدم
با تشکر
لطف کنید کد برای من بزارید ممنون میشم

raravaice
چهارشنبه 21 فروردین 1387, 13:03 عصر
سلام
فکر کنم مقدار برگشتی یه عدد باشه
میتونی نتیجه رو با SqlCommand.ExecuteScalar بخونی

موفق باشید

FatemehB
چهارشنبه 21 فروردین 1387, 13:50 عصر
string strCount;
SqlConnection PubsConn = new SqlConnection ("Data Source=server;integrated " + "Security=sspi;initial catalog=pubs;");
SqlCommand testCMD = new SqlCommand ("TestProcedure2", PubsConn);
testCMD.CommandType = CommandType.StoredProcedure;
PubsConn.Open();
strCount =testCMD.ExecuteScalar ().ToString() ;



همونطور که دوستمون گفتن باید از خاصیت ExecuteScalar استفاده کنید.

tc1000
چهارشنبه 21 فروردین 1387, 17:11 عصر
این همه زحمت کشیدی ممنون ام دقیقا همون چجیزی هستش که میخواستم
فقط من اول دستوری که اون بالا نوشتم رو توی محیط SQL کار کردم و خوب ام جواب داد
چطوری توی sp به کار ببرم
ممنون میشم اینم بزاری

بعد این طریقه استفاده از sp بود
اگر بخوام یه view رو بخونم چکار کنم
آیا با کدی که اخر گذاشتید هم فرق داره یا اینه امینه؟

FatemehB
شنبه 24 فروردین 1387, 11:01 صبح
فقط من اول دستوری که اون بالا نوشتم رو توی محیط SQL کار کردم و خوب ام جواب داد
چطوری توی sp به کار ببرم
ممنون میشم اینم بزاری


منظورتون رو متوجه نشدم!



اگر بخوام یه view رو بخونم چکار کنم


برای View باید مثل یه دستور select اقدام کنید. چون سطرهایی رو به شما برمی گردونه پس باید نتیجه رو در نهایت یک dataset یا datatable قرار بدید

tc1000
شنبه 24 فروردین 1387, 18:53 عصر
من میخوام دستورات رو توی sp بنویستم
و بعد از طریق برنامه اونsp رو صدا بزنم
کدش رو میخوام
هم سمت sql و هم سمت برنامه

twelve
شنبه 24 فروردین 1387, 19:27 عصر
من میخوام دستورات رو توی sp بنویستم

اگر منظور شما نوشتن دستورات بازیابی از View هست ، خب فرقی با بازیابی از Table نداره شما یک view رو ایجاد میکنید و در sp دستور عملیات لازم بر روی اون رو مینویسید
برای کال کردن در برنامه هم طبق فرمایش دوستان در پست های 2 ، 3 و 5 عمل می کنید

tc1000
سه شنبه 27 فروردین 1387, 17:14 عصر
میشه یه مثال بزارید
ممنون میشم

twelve
سه شنبه 27 فروردین 1387, 18:21 عصر
کد در Sp :


CREATE PROCEDURE sp_testzzzzzz
@status int out
AS

declare @total int
select @total= count(*) From View_Test as TotalCells
if @total > 0
set @status = @total
else
set @status = -1
return @status
GO


کد باز یابی در دات نت :



public int GetStatus(int status)
{
SqlClient.SqlConnection Cn = new SqlClient.SqlConnection("ConnectionString");
SqlClient.SqlCommand Cmd = new SqlClient.SqlCommand("sp_testzzzzzz", Cn);
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Parameters.Add(new SqlClient.SqlParameter("@Status", SqlDbType.Int));
Cmd.Parameters(0).Value = status;

Cn.Open();
int i;
i = Cmd.ExecuteScalar;
Cn.Close();
Cmd.Dispose();

return i;
}

tc1000
سه شنبه 27 فروردین 1387, 19:06 عصر
اگه دکمه تشکر بیشتر بود 100 بار می زدم خدا خیرت بده
این مجهول بودن این مسلئه رو برای من حل کردی
فقط یه چیزی
اگه نخوام از View اطلاعات رو بگیرم و توی همون PROCEDURE بخوام عملیات محاسباتی رو در چند جدول بنویسم چطور میشه میشه یه sp مثال بنویسید

twelve
چهارشنبه 28 فروردین 1387, 00:47 صبح
کد SP :


CREATE PROCEDURE sp_test

AS
declare @Final int
select @Final = ( (select sum(Field1) + (select sum(Field2) from table2)) - (select sum(Field3) from table3)) from table1
return @Final


امیدوارم منظورتون همین بوده باشه

tc1000
چهارشنبه 28 فروردین 1387, 02:13 صبح
با سلام
لطفا اگه امکان داره یه مثال برای دریافت نتیجه sp و همپنین دریافت ون از طریق asp.net برام بزنید
با تشکر

twelve
چهارشنبه 28 فروردین 1387, 02:34 صبح
کد Sp :


CREATE PROCEDURE sp_zzzz_test
@paramete int
AS
DECLARE @Total int
SELECT @Total = COUNT(*) FROM table1
WHERE FieldID = @Parameter

IF @Total = 0
SET @Total = 1
SELECT FieldID, FieldText,
(SELECT COUNT(*) FROM table1 WHERE FieldID = O.FieldID)
AS SingleTotal,
(CAST((SELECT COUNT(*) FROM table1 WHERE FieldID = O.FieldID)
AS Decimal) * 100 / @Total)
AS Percentage
FROM table2 O
WHERE FieldID = @Parameter

GO


این تابع درصد کل Field2 را بر حسب پارامتر تابع و تعداد سطرهای برابر Field1 درTable1 و Field2 در Table2 به دست می آورد .

کد بازیابی تعداد کل سطرهای برابر دو جدول table1 و table2 و درصد کل بر حسب پارامتر تابع در دات نت :


PublicSub GetDetails(ByVal Parameter AsInteger)
Cn = New SqlConnection("ConnectionString")
Cmd = New SqlCommand("sp_zzzz_test", Cn)
Cmd.CommandType = CommandType.StoredProcedure
Cmd.Parameters.Add(New SqlParameter("@Parameter", SqlDbType.Int))
Cmd.Parameters(0).Value = Parameter
Dim Dr As SqlDataReader
Dim [Single], Percent AsInteger
Cn.Open()
Dr = Cmd.ExecuteReader
Dr.Read()
[Single] = Dr("SingleTotal")
Percent = Dr("Percent")
Cn.Close()
Dr.Close()
Cmd.Dispose()
EndSub