PDA

View Full Version : چگونگی استفاده از پروسیجر بدون استفاده از پارامتر



epsilon
شنبه 05 تیر 1389, 11:40 صبح
سلام من از پروسیجر برای درج در برنامه ام استفاده کردم ولی مایل به استفاده از پارامترها نیستم کسی میدونه راه دیگه ای داره یا نه؟

مثلا دارم که:
CREATE PROCEDURE [dbo].[myproc_in_manager](@name nvarchar(50),@lname nvarchar(50),@manager_code nvarchar(1),@shmeli nvarchar(10),@shsh nvarchar(50),@m_picture nvarchar(50),@mail nvarchar(128),@phone nvarchar(11))AS
insert into tb_manager_site(name,manager_code,lname,shmeli,shs h,m_picture,mail,phone)values (@name,@manager_code,@lname,@shmeli,@shsh,@m_pictu re,@mail,@phone)
GO

در نتیجه باید در برنامه بنویسم:

try
{
//در اين قسمت اسم پروسيجر را مي نويسي
string sql = "exec myproc @st_no";
con = new SqlConnection(constrring());
com = new SqlCommand(sql, con);
com.Parameters.Add("@st_no", SqlDbType.NVarChar);
com.Parameters["@st_no"].Value = textBox1.Text;
.
.
.
یعنی نمیخوام از parameter استفاده کنم و با
string strsql = "insert into custmer (custmer_id,cust_name,address,telefone,fax,email) values (N'" + Convert.ToInt32(textBox2.Text) + "',N'" + textBox1.Text + "',N'" + textBox6.Text + "',N'" + textBox3.Text + "',N'" + textBox4.Text + "',N'" + textBox5.Text + "')";
دستورم را مشخص کنم. راهی هست؟

حامد مصافی
شنبه 05 تیر 1389, 12:19 عصر
به خط اضافه شده توجه كنيد

string sql = "myproc";
con = new SqlConnection(constrring());
com = new SqlCommand(sql, con);
com.Commandtype = ...StoredProcedure; // <--
com.Parameters.Add("@st_no", SqlDbType.NVarChar);
com.Parameters["@st_no"].Value = textBox1.Text;
.

epsilon
شنبه 05 تیر 1389, 12:23 عصر
عزیزم
شما هم که از parametr استفاده کردید!؟
com.Parameters.Add("@st_no", SqlDbType.NVarChar);
com.Parameters["@st_no"].Value = textBox1.Text;

راهی بجز پارامتر؟!

حامد مصافی
شنبه 05 تیر 1389, 18:40 عصر
عزیزم
شما هم که از parametr استفاده کردید!؟
com.Parameters.Add("@st_no", SqlDbType.NVarChar);
com.Parameters["@st_no"].Value = textBox1.Text;

راهی بجز پارامتر؟!
مقدار دهي پارامتر در كد شما بود و من بهش دست نزدم، در كدي كه من قرار دادم نيازي به پارامتر نيست. پس مي توانيد دو خط آخري را حذف كنيد.

epsilon
یک شنبه 06 تیر 1389, 09:28 صبح
ممنونم از کمکی که میکنید...
فکر میکنم سوالم رو خوب بیان نکردم؟!
خوب اگه مقدار دهی پارامتر ها رو ننویسم چه جوری مقدار دهی بشه؟
من میخوام هنگام استفاده از پروسیجر با این دستور مقداردهی کنم:
string strsql = "insert into custmer (custmer_id,cust_name, values (N'" + Convert.ToInt32(textBox2.Text) + "',N'" + textBox1.Text + "',N'" ( “;
امکانش هست؟ خوب وقتی از پروسیجر استفاده میکنم طبیعتا دیگه نباید توی جدول درج کنم !؟ با این نوع مقدار دهی امکان استفاده از پروسیجر هست یا نه؟

حامد مصافی
یک شنبه 06 تیر 1389, 09:45 صبح
اگر اين بار درست متوجه شده باشم ميشه اين:


string sql = "myproc";
con = new SqlConnection(constrring());
com = new SqlCommand(sql, con);
com.CommandType = CommandType.StoredProcedure;

com.Parameters.AddWithValue("@st_no", textBox1.Text);
//add other parameters

com.ExecuteNonQuery();

epsilon
یک شنبه 06 تیر 1389, 10:51 صبح
مسئله من اینه که میخوام دستور sqlcommand رو توی خط خلاصه کنم و در قالب تنها یک string به یک کلاس که قبلا تعریف کردم بفرستم منتها اگه از پروسیجر استفاده کنم مجبورم برای هر insert,delete,update که میخوام استفاده کنم یک کلاس جداگانه تعریف کنم که اینجوری استفاده نکردن از کلاس بهتر از استفاده کردنش میشه

کلاسم این شکلیه:
class Class1
{

public static void total(string strsql)
{
string strcon = "Data Source=.;Initial Catalog=store;Integrated Security=True";
SqlConnection con = new SqlConnection(strcon);
if (con.State == System.Data.ConnectionState.Closed)
con.Open();
SqlCommand com = new SqlCommand(strsql, con);
com.ExecuteNonQuery();
if (con.State == System.Data.ConnectionState.Open)
con.Close();
}

}

که با فرستادن دستوری مثل این
string strsql = "insert into custmer (custmer_id,cust_name, values (N'" + Convert.ToInt32(textBox2.Text) + "',N'" + textBox1.Text + "',N'" ( “;

میشه از مزایای کلاس استفاده کرد. اما با استفاده از پروسیجر نمیشه دستور رو توی خط خلاصه کرد و فرستاد و نیاز هست برای هر مقدار دهی تکس باکس از command استفاده کرد که این مانع استفاده از کلاس میشه.
در ضمن با public تعریف کردن command هم مشکل حل نمیشه فقط اگه بشه دستور رو توی یک خط خلاصه کرد (مثل بالا) میشه از کلاس استفاده کرد!