ویرایش و حذف دیتاگرید روی store procedure
با سلام خدمت برنامه نویسان عزیز
علی رغم توضیحات و جواب های بی شمار دریاره ویرایش و حذف از دیتاگرید اما نتونستم مطلبی رو که در این باره که روی storeproceture کار کنه پیدا کنم.
من اطلاعاتم را درون دیتا گرید نمایش می دم می خوام با کلیک روی هر سطر و انجام ویرایش و زدن کلید ویرایش این تغییرات اعمال بشه.برنامه خطا نداره اما وقتی تغییراتی را روی داده ها می دم و کلید ویرایش و می زنم این تغییرات در sql ذخیره نمی شه.این اتفاق واسه حذف کردن یک رکورد انتخاب شده از دیتاگرید هم می افته.با توجه به کدی که من نوشتم لطفا منو راهنمایی کنید.باتشکر.
private void btnUpdate_Click_1(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection();
SqlCommand cmd = new SqlCommand("PhoneBook_Update",cn);
cn.ConnectionString = "server=HAMED-PC;database=PhoneBook;uid=sa;pwd=hamed;";
cmd.Connection = cn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "PhoneBook_Update";
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 15).Value = txtName.Text;
cmd.Parameters.Add("@FName", SqlDbType.NVarChar, 25).Value = txtFname.Text;
DataTable dt = new DataTable();
da.Update(dt);
dgvphonebook.DataSource = dt;
}
اینم کد حذف:
private void btnDelete_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection();
SqlCommand cmd = new SqlCommand("PhoneBook_Update", cn);
cn.ConnectionString = "server=HAMED-PC;database=PhoneBook;uid=sa;pwd=hamed;";
cmd.Connection = cn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "PhoneBook_Delete";
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 15).Value = txtName.Text;
cmd.Parameters.Add("@FName", SqlDbType.NVarChar, 25).Value = txtFname.Text;
MessageBox.Show("اطلاعات با موفقیت حذف شد", "پیام حذف", MessageBoxButtons.OK, MessageBoxIcon.Information
, MessageBoxDefaultButton.Button1);
txtName.Clear();
txtFname.Clear();
txtCellphone.Clear();
txtOffice.Clear();
txtOther.Clear();
txtPhone.Clear();
}
نقل قول: ویرایش و حذف دیتاگرید روی store procedure
cmd.executenonquery یادت نره!
نقل قول: ویرایش و حذف دیتاگرید روی store procedure
اگه بخوام از cmd.executenonquery استفاده کنم که باید از cn.open() و cn.close() استفاده کنم در حالی که می خوام از اطلاعات دیتابیس بصورت disconnect استفاده کنم.اینطوری مشکلی ایجاد نمی شه؟
نقل قول: ویرایش و حذف دیتاگرید روی store procedure
تا اونجایی که من میدونم این روش بهتر از استفاده از dataAdapter هست (مخصوصا در تعداد رکورد زیاد)
کد مربوط به حذف رو گذاشتم update هم دقیقا شبیه همینه
اگه بازم نشد کد StoredProcedure را هم بذار ،شاید مشکل از اونجا باشه
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();
}
}
نقل قول: ویرایش و حذف دیتاگرید روی store procedure
کد شما رو واسه حذف نوشتم اما پیغام می ده که storeprocedure_delete پیدا نمی کنه.این کد storeprocedure واسه delete یه نگاهی بندازید و اشکالشو بهم بگید.ممنون می شم.
create procedure PhoneBook_Delete
@Name nvarchar(15),
@FName nvarchar(25)
AS
Delete from [PhoneBook].[dbo].[PhoneBook_table] where نام=@Name or [نام خانوادگی]=@FName
نقل قول: ویرایش و حذف دیتاگرید روی store procedure
خب توی پیام اگه نگاه کنی نوشته storeprocedure_delete
اما اسم storeprocedure شما Phonebook_delete
به هر حال بعد از یکی کردن نام storeprocedure در sql و در برنامه ت بهتره وقتی یه storeprocedure مینویسی اول تو محیط sqlServer اونو Execute کنی اگه جواب داد بری سراغ برنامه ت
بعد از Execute کردن این storeprocedure ازت مقدار دو پارامتر رو میخواد که بعد از مقداردهی باید رکورد مربوطه را پاک کنه
اگه باز مشکلی پیش اومد بنویس اگه بتونم کمک کنم خوشحال میشم
1 ضمیمه
نقل قول: ویرایش و حذف دیتاگرید روی store procedure
نقل قول:
نوشته شده توسط
Merila_Rad
خب توی پیام اگه نگاه کنی نوشته storeprocedure_delete
اما اسم storeprocedure شما Phonebook_delete
به هر حال بعد از یکی کردن نام storeprocedure در sql و در برنامه ت بهتره وقتی یه storeprocedure مینویسی اول تو محیط sqlServer اونو Execute کنی اگه جواب داد بری سراغ برنامه ت
بعد از Execute کردن این storeprocedure ازت مقدار دو پارامتر رو میخواد که بعد از مقداردهی باید رکورد مربوطه را پاک کنه
اگه باز مشکلی پیش اومد بنویس اگه بتونم کمک کنم خوشحال میشم
کد شما رو واسه حذف نوشتم.اما رکوردی رو حذف نمی کنه و هیچ خطایی هم نمی ده.
درمورد update هم خطای زیرو می ده :
storeproceture or function 'Phonebook_update' expects parameters '@phonenumber' wich was not supplied.
من برنامه رو می ذارم لطفا راهنماییم کنید که چیکار باید بکنم:ناراحت:
نقل قول: ویرایش و حذف دیتاگرید روی store procedure
دوستان چه را راه دور میرید.
از این کد برای درج استفاده کنید.
protected void btn_insert_Click(object sender, EventArgs e)
{
db.insert_user(txt_user.Value.Trim(), txt_pass.Value.Trim(), txt_email.Value.Trim());
Page_Load(null, null);
}
همانطور که میبینید در رویداد باتن ذخیره کد نوشته شده است.
خط دوم کد برای اینکه دیتاگرید رفرش بشه.
من دستور حذف و اپدیت رو ندارم.حالا یکی اینا رو به من بده؟؟؟
نقل قول: ویرایش و حذف دیتاگرید روی store procedure
من کد پروسیجر و C# رو برات قرار میدم امید وارم بدردت بخوره .
ALTER PROCEDURE [dbo].[PhoneBook_Update]
@Id INT,
@Name nvarchar(20),
@Fname nvarchar(20),
@PhoneNumber int,
@CellphoneNumber varchar(20),
@OfficeNumber varchar(10),
@OtherNumber varchar(10)
AS
BEGIN
UPDATE PhoneBook_table
SET
Name=@Name ,
Fname=@Fname ,
PhoneNumber=@PhoneNumber ,
CellphoneNumber=@CellphoneNumber ,
OfficeNumber=@OfficeNumber,
OtherNumber=@OtherNumber
WHERE Id=@Id
END
SqlCommand command = new SqlCommand("PhoneBook_Update", connString);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@Id", SqlDbType.Int).Value = Id;
command.Parameters.Add("@Name", SqlDbType.NVarChar).Value = TxtName.Text.Trim();
command.Parameters.Add("@Fname", SqlDbType.NVarChar).Value = TxtFamily.Text.Trim();
command.Parameters.Add("@PhoneNumber", SqlDbType.int).Value = TxtPhoneNumber.Text.Trim();
command.Parameters.Add("@CellphoneNumber", SqlDbType.VarChar).Value = TxtCellphoneNumber.Text.Trim();
command.Parameters.Add("@OfficeNumber", SqlDbType.VarChar).Value = txtOfficeNumber.Text.Trim();
command.Parameters.Add("@OtherNumber", SqlDbType.VarChar).Value = txtOtherNumber.Text.Trim();
connString.Open();
command.ExecuteNonQuery();
connString.Close();
نقل قول: ویرایش و حذف دیتاگرید روی store procedure
دوست گرامی sorena2000
وقتی از استوری پروسیجور استفاده میکنید , دیگه نیازی نیست از کدهای sql استفاده کنید.
در سال 2012 طرح جدیدی به نام LINQ امده که در یک خط کارهایی از قبیل : آپدیت و ذخیره و ..... را به راحتی انجام داد.
مانند:
db.insert_user(txt_user.Value.Trim(), txt_pass.Value.Trim(), txt_email.Value.Trim());
نقل قول: ویرایش و حذف دیتاگرید روی store procedure
بله این رو میدونم من هم کد معمولی رو نوشتم بخاطر اینکه پروژه دوستمون رو که دیدم به این روش بود من هم براش اینجور نوشتم .
اما در کل حق با شماست