PDA

View Full Version : اجرای stored procedure



mohamad.alijani
یک شنبه 13 شهریور 1390, 17:05 عصر
با سلام
من یک stored prosedure توی sqlserver آماده کردم که یه پارامتر خروجی داره
وقتی که از طریق برنامه این SP رو فراخوانی می کنم و اجرا میشه توی متغیر خروجی فقط یک حرف از اون مقدار مورد نظر رو برگشت می ده (اولین حرف) به نظر شما مشکل از کجاست؟
ضمنا متن به صورت فارسی توی پایگاه داده ذخیره میشه.

computer _ student
یک شنبه 13 شهریور 1390, 20:13 عصر
منظورتون از يك پارامتر خروجي چيه؟
تا جايي كه من ميدونم sp ها معمولا با يك دستور select نوشته مي شوند و خروجي آن ها يك جدول است.
يعني شما يك فيلد از جدول را براي نمايش انتخاب كرديد؟
اگه اين طور باشه به احتمال زياد مشكل از كد نويسي شما هست. اگه كد را قرار بديد اعضاي سايت بهتر مي تونن كمكتون كنن
متن فارسي توي sql 2008 هيچ مشكلي نداره اما توي sql 2005 و نسخه هاي پايين تر هنگام ورود داده در سي شارپ بايد قبل از مقدار يك حرف n قرار دهيد. (البته من خودم تا حالا امتحان نكردم فقط شنيدم كه اينطوريه)

csharpprogramer88
یک شنبه 13 شهریور 1390, 21:26 عصر
شما دستور را قرار بدید آیا select داری مینویسی؟

پارامتر را بصورت درست در sp نوشتی؟ روی sp راست کلیک کن execute stored procedure را بزن اینجا ببین sp درست کار میکنه؟

موفق باشید

mohamad.alijani
یک شنبه 13 شهریور 1390, 22:25 عصر
منظورتون از يك پارامتر خروجي چيه؟
تا جايي كه من ميدونم sp ها معمولا با يك دستور select نوشته مي شوند و خروجي آن ها يك جدول است.
يعني شما يك فيلد از جدول را براي نمايش انتخاب كرديد؟
اگه اين طور باشه به احتمال زياد مشكل از كد نويسي شما هست. اگه كد را قرار بديد اعضاي سايت بهتر مي تونن كمكتون كنن
متن فارسي توي sql 2008 هيچ مشكلي نداره اما توي sql 2005 و نسخه هاي پايين تر هنگام ورود داده در سي شارپ بايد قبل از مقدار يك حرف n قرار دهيد. (البته من خودم تا حالا امتحان نكردم فقط شنيدم كه اينطوريه)
sp ها می تونند مثل توابع پارامتر بگیرند و البته می شه که ما پارامتر های مورد نیاز خودمون رو به صورت خروجی تعریف کنیم یعنی بعد از تعریف پارامتر کلمه کلیدی output رو قرار بدیم در این صورت بعد از اجرای SP مقدار اون متغیر قابل دسترسی هست.
در مورد نوع داده ها که فرمودید توی sql2008 باید یه n قبلش قرار بگیره درسته ولی اجباری نیست این نوع های داده ای توی نسخه های جدید sqlserver دیگه منسوخ شدند و دیگه متغیری به صورت varchar نداریم بلکه nvarchar هست. حالا دلایل اینکار توی حوصله این بحث نیست.


پارامتر را بصورت درست در sp نوشتی؟ روی sp راست کلیک کن execute stored procedure را بزن اینجا ببین sp درست کار میکنه؟
بله توی sqlserver با موفقیت اجرا میشه فقط توی اجرا از طریق سی شارپ گیر دارم.

mohamad.alijani
یک شنبه 13 شهریور 1390, 22:47 عصر
کدهای sp من به صورت زیر هست

CREATE PROCEDURE getName @p1 int , @p2 nvarchar(50) output
AS
BEGIN
SET NOCOUNT ON;
SELECT @p2 = name from college where ID = @p1
END
GO

خوب برای اجرا توی sqlserver هم از کدهای زیر استفاده کردم که جواب درست رو برمی گردونه



declare @r nvarchar(50)
exec getname 26,@r output
print @r

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


sqlCmd.CommandText = storedProcedureName;
sqlCmd.CommandType = CommandType.StoredProcedure;

sqlCmd.Parameters.AddWithValue("@p1", "26");
sqlCmd.Parameters.AddWithValue("@p2", "");

sqlCmd.Parameters[1].Direction = ParameterDirection.Output;

sqlCmd.Connection.Open();
sqlCmd.ExecuteNonQuery();
string oupput = sqlCmd.Parameters[outputIndex[0] - 1].Value.ToString();

قرار هست که کلمه ریاضی توی متغیر output قرار بگیره که فقط حرف ر قرار می گیره

behnamm92
چهارشنبه 04 مرداد 1391, 23:46 عصر
منم همین مشکل را با insert دارم و نوع داده هم nvarchar