PDA

View Full Version : طریقه ارسال پارامتر به SQL



smt_414
جمعه 23 شهریور 1386, 11:03 صبح
سلام به همه دوستان
می خواستم طریقه ارسال پارامتر به SQL رو با یک مثال توضیح بدید
و یا کد زیر رو اصلاح کنید
در تایپیک های C# و SQL به دنبال این موضوع گشتم اما مطالب موجود در سطح بالاتری بودند

من در پنجره solution explorer بر روی اسم پروژه راست کلیک کردم و از add new item یک database به اون اضافه کردم و مراحل تولید dataset رو بوسیله wizard طی کردم و یک table ساختم و یک procedure ساختم
که کارش گرفتن رشته از برنامه و ذخیره اون در پایگاه است(البته این اولین procedure است که نوشتم !)

اگر امکان داره یک منبع هم در این مورد معرفی کنید.
کد برنامه

public void store()
{
SqlConnection objConnection = new SqlConnection ("Data Source=.'\'SQLEXPRESS;AttachDbFilename=G:'\'SALEH\ vsproject\testsp\testsp\testsp.mdf;Integrated Security=True;User Instance=True");
SqlCommand objCommand = new SqlCommand();
objCommand.Connection = objConnection;
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "dbo.StoredProcedure1";
objDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
objCommand.Parameters.AddWithValue("@name",tb_name.Text);
objCommand.Parameters.AddWithValue("@phone",tb_phone.Text);
objConnection.Open();
objCommand.ExecuteNonQuery();
objConnection.Close();

}
کد رویه

CREATE PROCEDURE dbo.StoredProcedure1 @name nvarchar(10),@phone nvarchar(10)

(
@name varchar(10)
@phone varchar(10)
)

AS
/* SET NOCOUNT ON */
insert into table1 values (@name,@phone)
RETURN
با تشکر:قلب:

smt_414
جمعه 23 شهریور 1386, 14:19 عصر
سلام به همه دوستان
کسی می تونه کمکی یکنه؟؟؟:افسرده:

PC2st
جمعه 23 شهریور 1386, 16:46 عصر
از کدام شیئ برای اجرای SP میخواید استفاده کنید؟
شیئ objDataAdapter.SelectCommand هنوز پارامتری براش مشخص نشده...
و شیئ objCommand هنوز دستور SQL ای براش تعریف نشده...

smt_414
جمعه 23 شهریور 1386, 17:48 عصر
سلام راستش رو بخواهید
درست نمی دونم اگه امکان داره همین کد رو اصلاح کنید
ممنونم:قلب:

smt_414
جمعه 23 شهریور 1386, 21:25 عصر
سلام PC2st.ir جان
کد برنامه رو اینطور تغیر دادم

public void store()
{
SqlConnection objConnection = new SqlConnection ("Data Source=.'\'SQLEXPRESS;AttachDbFilename=G:'\'SALEH\ vsproject\testsp\testsp\testsp.mdf;Integrated Security=True;User Instance=True");
SqlCommand objCommand = new SqlCommand();
objCommand.Connection = objConnection;
objCommand.CommandText = "dbo.StoredProcedure1";
objCommand.CommandType = CommandType.StoredProcedure;
objCommand.Parameters.AddWithValue("@name",tb_name.Text);
objCommand.Parameters.AddWithValue("@phone",tb_phone.Text);
objConnection.Open();
objCommand.ExecuteNonQuery();
objConnection.Close();

}


حالا چکار کنم؟

mahtab_18
جمعه 23 شهریور 1386, 22:10 عصر
سلام
امیدوارم این کد بتونه کمکت کنه



SqlConnection con = newSqlConnection("Data Source=WE\\SQLEXPRESS;Initial Catalog=dbname;Integrated Security=True");




SqlCommand com = newSqlCommand();

SqlDataAdapter da = newSqlDataAdapter();
con.Open();
com.Connection = con;
com.CommandText = "INSERT INTO sabtmelk(malek,telm,mobile) VALUES(@malek,@telm,@mobilem)";
com.Parameters.Add("@malek", SqlDbType.NVarChar, 50).Value = t3.Text;
com.Parameters.Add("@telm", SqlDbType.NVarChar, 50).Value = t5.Text;
com.Parameters.Add("@mobilem", SqlDbType.NVarChar, 50).Value = t6.Text;
com.ExecuteNonQuery();
con.Close();

smt_414
جمعه 23 شهریور 1386, 22:29 عصر
از توجهتون ممنونم
اما می خوام تو برنامه از procedure استفاده کنم
باز هم تشکر

PC2st
شنبه 24 شهریور 1386, 00:17 صبح
SP چیزی شبیه به زیر باید باشه:


ALTER PROCEDURE dbo.StoredProcedure1
(
@name varchar(10)
@phone varchar(10)
)
AS
INSERT INTO table1 VALUES (@name, @phone)
RETURN

در اینصورت، با توجه به کدهایی که نوشتید، قاعدتا باید درست کار کنه...
چه اروری رو تولید میکنه و متن خطاش چیه!؟

Hamid.reza
شنبه 24 شهریور 1386, 12:10 عصر
کدی که نوشتید 2 تا ایراد کوچولو داره که اصلاحش کردم


SqlConnection objConnection = new SqlConnection("Data Source=.'\'SQLEXPRESS;AttachDbFilename=G:'\'SALEH\ vsproject\testsp\testsp\testsp.mdf;Integrated Security=True;User Instance=True");
SqlCommand objCommand = new SqlCommand();
objCommand.Connection = objConnection;
objCommand.CommandText = "StoredProcedure1";
objCommand.CommandType = CommandType.StoredProcedure;
objConnection.Open();
objCommand.Parameters.Add("@name", System.Data.SqlDbType.NVarChar, 10).Value=tb_name.Text;
objCommand.Parameters.Add("@phone", System.Data.SqlDbType.NVarChar, 10).Value=tb_phone.Text;
objCommand.ExecuteNonQuery();
objConnection.Close();
objConnection.Dispose();
objCommand.Dispose();


در ضمن در کدی که من نوشتم نوع پارامتر های Name, Phone را در Table1 به صورت Nvarchar به طول 10 تا در نظر گرفتم که اگر غیر از اینه خودتون زحمت بکشید و اصلاحش کنید
و یک نکته دیگه اینکه StorProcedure ای که شما نوشتید اشتباهه ، که باید به شکل زیر اصلاحش کنی


CREATE PROCEDURE dbo.StoredProcedure1
(
@name nvarchar(10),
@phone nvarchar(10)
)
AS
insert into table1 (name,phone) values (@name,@phone)
RETURN

gomnam
شنبه 24 شهریور 1386, 13:04 عصر
من در پنجره solution explorer بر روی اسم پروژه راست کلیک کردم و از add new item یک database به اون اضافه کردم و مراحل تولید dataset رو بوسیله wizard طی کردم و یک table ساختم و یک procedure ساختم
که کارش گرفتن رشته از برنامه و ذخیره اون در پایگاه است(البته این اولین procedure است که نوشتم !)



سلام دوست عزیز من فرصت نکردم که کد شما و کدی که بقیه دوستان دادن را بخونم و چک کنم
ولی فعلا این موضوع مهم را میتونم بهتون بگم که سعی کنید همیشه از کد نویسی استفاده کنید تا ویزارد
ویزارد فقط زمانی خوبه که بخواد جنبه آموزشی داشته باشه ولی اگه واقعا میخواین برنامه بنویسین همه چیز را خودتو بنویسید
اینطوری هم تجربه و مهارتتون زیاد میشه هم اینکه با مشکلات نوشتن کد و خطاهایی که بهتون میده آشنا میشین هم اینکه بعد از مدتی توی debug کردن برنام ها و کد ها حرفه ای میشین و باعث میشه که تا یه error یا یه warning از کامپایلر میبینین فورا متوجه بشین که چی میگه و اشکال از کجاست
ویزارد به نظر من 2 ایراد خیلی بزرگ داره
1 ) دست آدم خیلی باز نیست
2) چون معمولا ویزارد ها بدون خطا هستند باعث میشه که شما را از اصل داستان (یاد گیری) دور کنه

البته اگه نازه کار هستین برای اوایل کار خوبه ولی .......
موفق باشید
کیانی

smt_414
شنبه 24 شهریور 1386, 13:18 عصر
سلام
من دیتابیس رو به شیوه ای که گفته بودم ساختم و error زیر ر می داد
An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

این دیتابیس رو من تو sql نداشتم (یعنی اونجا به وجود نیومده بود)
به همین دلیل دیتابیس رو از برنامه حذف کردم و اون رو داخل sql ساختم
و با کمک پروسیجوری که PC2st.ir لطف کرده بودند برنامه اجرا شد
و برای کمک به دوستانی که در آینده به c# رو می آرن , کد درست رو اینجا قرار می دم تا بتونن استفاده کنن

public void store()
{
SqlConnection objConnection = new SqlConnection("Data Source=.;Initial Catalog=testsp;Integrated Security=True");
SqlCommand objCommand = new SqlCommand();
objCommand.Connection = objConnection;
objCommand.CommandText = "StoredProcedure1";
objCommand.CommandType = CommandType.StoredProcedure;
objCommand.Parameters.AddWithValue("@name",tb_name.Text);
objCommand.Parameters.AddWithValue("@phone",tb_phone.Text);
objConnection.Open();
objCommand.ExecuteNonQuery();
objConnection.Close();

}



ALTER PROCEDURE dbo.StoredProcedure1

(
@name nchar(10)
@phone nchar(10)
)

AS
/* SET NOCOUNT ON */
insert into table1 values(@name,@phone)
RETURN


HAMID.reza جان از شما هم ممنونم


اما یه سوال اسم پروسیجور ما dbo.StoredProcedure1 یا StoredProcedure1 من هر دو رو تو تابع store (کد بالا)امتحان کردم و جواب داد؟؟

smt_414
شنبه 24 شهریور 1386, 15:58 عصر
سلام
پروسیجور فوق هنگام save کردن error زیر رو می داد
Incorrect syntax near '@phone'.
Must declare the scalar variable "@name"

با استفاده از دستور HAMID.reza این تغیر رو دادم و پروسیجور save شد

@name nchar(10),