PDA

View Full Version : سوال: storeproceture در سی شارپ



bahareh1368
یک شنبه 28 شهریور 1389, 14:32 عصر
با سلام خدمت دوستان عزیز برنامه نویس

من یه storeprocedure برای ویرایش و حذف نوشتم با sql که ت. سی شارپ ازش استفاده می کنم.اما موقعی داده ها رو درون datagride ویرایش می کنم خطای زیر رو می ده و زمانی که می خوام رکوردی رو حذف کنم حذف نمی کنه و هیچ خطایی هم نمی ده.من storeproceture هامو گذاشتم.و کد ویرایش و حذف هم نوشتم لطفا منو راهنمایی کنید.
پیغام خطا:
storeproceture or function 'Phonebook_update' expects parameters '@phonenumber' wich was not supplied.

GO

Alter procedure PhoneBook_Update

@Name nvarchar(50),
@FName nvarchar(50),
@PhoneNumber varchar(50),
@CellphoneNumber varchar(50),
@OfficeNumber varchar(50),
@OtherNumber varchar(50)
AS
update [PhoneBook].[dbo].[PhoneBook_table] set
نام=@Name,
[نام خانوادگی]=@FName,
[شماره منزل]=@PhoneNumber,
[شماره موبایل]=@CellphoneNumber,
[شماره اداره]=@OfficeNumber,
[شماره دیگر]=@OtherNumber

where نام=@Name or [نام خانوادگی]=@FName

-----------------------------------------

GO

Alter procedure PhoneBook_Delete

@Name nvarchar(50),
@FName nvarchar(50)

AS
Delete from [PhoneBook].[dbo].[PhoneBook_table] where نام=@Name or [نام خانوادگی]=@FName


private void btnDelete_Click(object sender, EventArgs e)
{
DialogResult a;
a = MessageBox.Show("آیا مطمئن هستید؟", "هشدار", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (a == DialogResult.No)
return;
else if (a == DialogResult.Yes)
{
SqlConnection con = new SqlConnection();
SqlCommand com = new SqlCommand();

con.ConnectionString = "Data Source=.;Initial Catalog=Phonebook;Integrated Security=True";
if (con.State != ConnectionState.Open)
con.Open();

com.CommandType = CommandType.StoredProcedure;
com.Parameters.Add("@Name", SqlDbType.NVarChar, 15).Value = txtName.Text;
com.Parameters.Add("@FName", SqlDbType.NVarChar, 25).Value = txtFname.Text;
com.CommandText = "PhoneBook_Delete";
com.Connection = con;
com.ExecuteNonQuery();
con.Close();
con.Dispose();

}
}


DialogResult a;
a = MessageBox.Show("آیا مطمئن هستید؟", "هشدار", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (a == DialogResult.No)
return;
else if (a == DialogResult.Yes)
{
SqlConnection con = new SqlConnection();
SqlCommand com = new SqlCommand();

con.ConnectionString = "server=HAMED-PC;database=PhoneBook;uid=sa;pwd=hamed;";
if (con.State != ConnectionState.Open)
con.Open();

com.Connection = con;
com.CommandType = CommandType.StoredProcedure;
com.CommandText = "PhoneBook_Update";
com.Parameters.Add("@Name", SqlDbType.NVarChar, 50).Value = txtName.Text;
com.Parameters.Add("@FName", SqlDbType.NVarChar, 50).Value = txtFname.Text;
com.ExecuteNonQuery();
con.Close();
con.Dispose();
}
}

ardeshir1365
یک شنبه 28 شهریور 1389, 15:48 عصر
سلام
این کد برای حذف از دیتاگریده
طریقه کارش:اول سطری که میخوای حذف شود رو انتخاب بد دکمه حذف رو بزن
نکته اونهایی که به صورت پر رنگ و زیر خط دار هستن براساس پایگاه داده خودت تغییر بده
کد دکمه حذف :
SqlConnection conn = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=databes_name;Data Source=.");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();//نگهداری داده ها در دات نت
SqlCommand cmd = new SqlCommand();



if (MessageBox.Show("آیا مطمئن هستید که رکورد انتخاب شده حذف شود", "حذف", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "delete from name_tabel where code=@code";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@code", dataGridView1[1, dataGridView1.SelectedCells[0].RowIndex].Value.ToString());
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
ds.Clear();

}

bahareh1368
دوشنبه 29 شهریور 1389, 06:09 صبح
سلام
این کد برای حذف از دیتاگریده
طریقه کارش:اول سطری که میخوای حذف شود رو انتخاب بد دکمه حذف رو بزن
نکته اونهایی که به صورت پر رنگ و زیر خط دار هستن براساس پایگاه داده خودت تغییر بده
کد دکمه حذف :
SqlConnection conn = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=databes_name;Data Source=.");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();//نگهداری داده ها در دات نت
SqlCommand cmd = new SqlCommand();



if (MessageBox.Show("آیا مطمئن هستید که رکورد انتخاب شده حذف شود", "حذف", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "delete from name_tabel where code=@code";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@code", dataGridView1[1, dataGridView1.SelectedCells[0].RowIndex].Value.ToString());
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
ds.Clear();

}



مرسی از راهنماایی که کردی اما اگه دوباره به کدهای بالا نگاهی بیندازی متوجه می شید که ویرایش و حذف من بر اساس دو تا از ستونای جدولم صورت می گیره.می شه کدتو واسم اصلاح کنی و یه توضیح درباره انتخاب سطر از دیتاگرید و پارامترهای ورودی که گرفته بدی؟منظورم عدد 1 درون کروشه است.ممنون می شم.در ضمن من از پروسیچرها استفاده کردم.

mohsen_csharp
دوشنبه 29 شهریور 1389, 06:31 صبح
سلام

where نام=@Name or [نام خانوادگی]=@FName
این دیگه چجور شرط گذاشتنه اینجوری که شرط انتخاب فیلد نمیزارن
به فرض اگه دو رکورد به صورت علی اکبری و علی رضایی داشته باشیم و به شرطمون علی علوی بدیم اونوقت هر دو رکورد بالا حذف می شن که چون با هم or شدن
همیشه شرط گذاری باید روی کلید انجام بشه و اگر جدول چند کلیده باشه اونوقت باید باهم and بشه

bahareh1368
دوشنبه 29 شهریور 1389, 18:32 عصر
خوب من تازه شروع کردم به خوندن سی شارپ و sql مورد نیاز سی شارپ و یه دانشجو هستم که حتی پایگاه داده رو هنوز پاس نکردم.اطلاعاتم اندکه که اونم خودم خوندمش لطفا در باره شرطی که باید بذارم تا درست یشه کمی برام توضیح بدید