PDA

View Full Version : سوال: مشکل در دریافت مقدار یک متغیر از استور پراسیجر



NasimBamdad
چهارشنبه 28 اسفند 1392, 11:16 صبح
سلام و خسته نباشید

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


USE [Anbar]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Product_Add] (@prod_name nvarchar(50),@code nvarchar(50),@usd_cost bigint,@iqd_cost bigint,@catID int)
AS
BEGIN
SET NOCOUNT ON;
Declare @pid nvarchar(50)
Insert into product(prod_name,code,usd_cost,iqd_cost,catId) VALUES (@prod_name,@code,@usd_cost,@iqd_cost,@catId)
Select @pid = (Select Top 1 code From product Order by id DESC)
return @pid
END


حالا به وسیله کد زیر در C# اجراش می کنم و مقدار متغییر اش رو دریافت می کنم ( pid@ )


SqlConnection cnn = new SqlConnection(db.Cnn);
cnn.Open();
SqlCommand cmd = cnn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Product_Add";
cmd.Parameters.AddWithValue(@"prod_name", radTextBox2.Text);
cmd.Parameters.AddWithValue(@"code", radTextBox1.Text);
cmd.Parameters.AddWithValue(@"usd_cost", radCalculatorDropDown1.Value);
cmd.Parameters.AddWithValue(@"iqd_cost", radCalculatorDropDown2.Value);
cmd.Parameters.AddWithValue(@"catID", comboBox1.SelectedValue);
var returnParameter = cmd.Parameters.Add("@pid", SqlDbType.NVarChar);
returnParameter.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
PID = Convert.ToString(returnParameter.Value);
cnn.Close();


نوع فیلد که من میخوام مقدارش رو در متغییر pid@ بریزم NvarChar(50) هست . ولی یک اررور میده بهم

میگه نمی تونه مقدار nvarchar رو به int تبدیل کنه .

متن اررور :



Conversion failed when converting the nvarchar value 'moas7' to data type int.



به نظر شما مشکل از کجاست ؟!

plus
چهارشنبه 28 اسفند 1392, 14:47 عصر
نوع داده خروجی Stored Procedure باید از نوع Integer باشه.ظاهرا ستون code در جدول product رو از نوع nvarchar ذخیره کردین که وقتی قراره RETURN بشه با این خطا مواجه میشین.
پ.ن: شاید بهتر باشه بجای SP از Function استفاده کنید.

NasimBamdad
چهارشنبه 28 اسفند 1392, 16:03 عصر
یعنی برای Stored Procedure نمیشه خروجی رو از نوع nVarChar استفاده کرد ؟ حتما باید Integer باشه !؟

NasimBamdad
چهارشنبه 28 اسفند 1392, 16:05 عصر
Function اش رو شما میشه بنویسی ؟

کد هاش توی سی شارپ چه طوری میشه !؟

plus
چهارشنبه 28 اسفند 1392, 17:40 عصر
یعنی برای Stored Procedure نمیشه خروجی رو از نوع nVarChar استفاده کرد ؟ حتما باید Integer باشه !؟
بله این لینک MSDN از کلمه کلید RETURN هست: http://technet.microsoft.com/en-us/library/ms174998(v=sql.90).aspx
توی SQL SERVER (و احیانا سایر DBMS ها) مفهومی شبیه Stored Procedure هست به اسم FUNCTION که شما میتونی نوع خروجیش رو تعیین کنی.
http://msdn.microsoft.com/en-us/library/ms186755.aspx البته قطعا بجز نوع خروجی، تفاوت های دیگه ای هم با Stored Procedure داره.خودتون بررسی کنید من اطلاعات کافی ندارم در این مورد.البته فکر نمیکنم در مورد فراخوانیش در #C مشکلی باشه، احیانا شبیه فراخوانی Stored Prodecure هست...

aslan
چهارشنبه 28 اسفند 1392, 18:26 عصر
سلام
لینک زیر را ببینید . شاید کمکتون کرد :
http://stackoverflow.com/questions/924455/stored-procedure-returns-varchar
در ضمن شکل صحیح تعریف و استفاده از متغیر OUTPUT را از لینک زیر مطالعه فرمایید
http://www.sqlteam.com/article/stored-procedures-returning-data