PDA

View Full Version : سوال: نحوه کار کردن با store procedure در #C



hessam2003
جمعه 20 بهمن 1391, 12:35 عصر
سلام.
میخواستم بدونم نحوه کار کردن با توابع خروجی که در Store procedure ایجاد شده در SQL Server را چگونه باید در# C فراخوانی و استفاده کنیم؟
مثل: declare @Error nvarchar(50) output
این متغییر فقط پیام خطای را چاپ میکند..
برای واضح بودن تکه کدی را در ایجاد کردن در Store procedure می نویسم.

Create Procedure Phone_book_Account_insert
@Account_srl bigint,
@Account_id bigint,
@Account_name nvarchar(20),
@Account_lname nvarchar(20),
@Account_company nvarchar(30),
@Account_phone char(12),
@Account_cell_phone char(12),
@Account_email nchar(30),
@Account_address nvarchar(50),
@Account_command nvarchar(50),
@err nvarchar(200) output
AS
if exists (select Account_srl from Phone_book_Account
where Account_srl=@Account_srl and Account_id=@Account_id)
begin
set @err='کاربر قبلا ثبت شده است!'
return
end
insert into Phone_book_Account(Account_id,Account_name,Account _lname,Account_company,Account_phone,
Account_cell_phone,Account_email,Account_address,A ccount_command) values (
@Account_id,@Account_name,@Account_lname,@Account_ company,@Account_phone,@Account_cell_phone,
@Account_email,@Account_address,@Account_command)

ali.bahrami
شنبه 21 بهمن 1391, 14:12 عصر
دوست عزیز من یک مثال برای شما مینویسم اگر متوجه نشدی بگو توضیح بدم.


SqlCommand Cmd = new SqlCommand;
SqlParameter return = new SqlParameter;
return = Cmd.Parameter.Add("@return",SqlDbTyoe.Int);
return.Direction = ParameterDirection.Output;


برای بدست آوردن مقدار پارامتر هم از دستور
return.Value.ToString();
استفاده کنید.

hessam2003
یک شنبه 22 بهمن 1391, 12:32 عصر
سلام و خسته نباشد.
اگه ممکنه واسه اینزرت کردن این داده ها یک توضیح بدبد.

@Account_address nvarchar(50),
@Account_command nvarchar(50),
@err nvarchar(200) output
مثلا می خواییم Account_address,Account_command را در C# به وسیله پارامترها ثبت کنیم و پیغام داخل err@ را هم نمایش بدیم.

ali.bahrami
یک شنبه 22 بهمن 1391, 13:14 عصر
دوست عزیز وقتی یک شی ازنوع SqlCommand می سازی متونی مشخص کنید که نوع دستور SQl از چه نوعی است (مثلا Store Procedure) و همچنین میشه پارامتر هم ست کرد.

SqlConnection Con = new SqlConnection();
SqlCommand Cmd = new SqlCommand();
Cmd.CommandType = CommandType.StoreProcedure;
Cmd.CommandText = "نام رویه ذخیره شده";
Cmd.Parameters.AddWithValue("@Account_address", مقدار پارامتر(;
Cmd.Parameters.AddWithValue("@Account_command",مقدار پارامتر(;
SqlParameter err = new SqlParameter();
err.Direction = ParametesDirection.Output;
err = Cmd.Parameters.Add("@err",SqlDbType.nvarchar);
Con.Open();
Cmd.ExecuteNoneQuery();
Con.Close();
string error = err.Value.Tostring();

hessam2003
دوشنبه 23 بهمن 1391, 20:23 عصر
سلام.
خیلی ممنون از زحمتتون و وقتی که میذارید.
من کد شما رو استفاده کردم اما بهم این پیغام خطا میده.
http://pajoheshgar.persiangig.com/pic.jpg
اینم کد داخلی VS
SqlConnection cnn = new SqlConnection("Data Source=HESSAM;Initial Catalog=Phone_book;Integrated Security=True");
private void button1_Click(object sender, EventArgs e)
{
try
{

SqlCommand comm = new SqlCommand("Phone_book_Account_insert", cnn);
comm.CommandType = CommandType.StoredProcedure;
// comm.CommandText = "نام رویه ذخیره شده";
comm.Parameters.AddWithValue("@Account_srl", 1);

if (textBox1.Text == "") throw new Exception("کد کاربری را وارد نکرده اید");
else
comm.Parameters.AddWithValue("@Account_id", int.Parse(textBox1.Text));

comm.Parameters.AddWithValue("@Account_name", textBox2.Text);
comm.Parameters.AddWithValue("@Account_lname", textBox3.Text);
comm.Parameters.AddWithValue("@Account_company", textBox4.Text);
comm.Parameters.AddWithValue("@Account_phone", textBox5.Text);
comm.Parameters.AddWithValue("@Account_cell_phone", textBox6.Text);
comm.Parameters.AddWithValue("@Account_email", textBox7.Text);
comm.Parameters.AddWithValue("@Account_address", textBox8.Text);
comm.Parameters.AddWithValue("@Account_command", textBox9.Text);
SqlParameter err = new SqlParameter();
err.Direction = ParameterDirection.Output;
err = comm.Parameters.Add("@err", SqlDbType.NVarChar);
cnn.Open();
comm.ExecuteNonQuery();
cnn.Close();
string error = err.Value.ToString();
MessageBox.Show(error.ToString());
SqlDataAdapter da = new SqlDataAdapter("select * from Phone_book_account", cnn);
DataSet ds = new DataSet();
da.Fill(ds, "phone");
}
catch (Exception ex)
{

MessageBox.Show(ex.Message);
}
finally
{
cnn.Close();
}
اینم کد داخل Procedure SQL
99924

create Procedure Phone_book_Account_insert
@Account_srl bigint,
@Account_id bigint,
@Account_name nvarchar(20),
@Account_lname nvarchar(20),
@Account_company nvarchar(30),
@Account_phone char(12),
@Account_cell_phone char(12),
@Account_email nchar(30),
@Account_address nvarchar(50),
@Account_command nvarchar(50),
@err nvarchar(200) output
AS
if exists (select Account_srl from Phone_book_Account
where Account_id=@Account_id)
begin
set @err='کاربر قبلا ثبت شده است!'
return
end
insert into Phone_book_Account(Account_id,Account_name,Account _lname,Account_company,Account_phone,
Account_cell_phone,Account_email,Account_address,A ccount_command) values (
@Account_id,@Account_name,@Account_lname,@Account_ company,@Account_phone,@Account_cell_phone,
@Account_email,@Account_address,@Account_command)

این کد اجرا در SQL
declare @err nvarchar(200)
exec Phone_book_Account_insert 10052,6,'ali','reza','','','','','','',@err output
select @err
select * from Phone_book_Account
99921