PDA

View Full Version : عدم Update شدن داده ها توسط Stored Procedure



komeil64
سه شنبه 07 اردیبهشت 1389, 16:50 عصر
سلام
من چون زیاد با استور پراسیجر ها کار نمی کردم بعضی جاها مفهوم نیست
من یه sp آپدیت به شکل زیر دارم:



ALTER Procedure [dbo].[sp_tblcontent_Update]
@ID int,
@titr nvarchar(200),
@writer nvarchar(100),
@a_body nvarchar(MAX),
@b_body nvarchar(MAX),
@img nvarchar(MAX)
As
Begin
Update tblcontent
Set
[titr] = @titr,
[writer] = @writer,
[a_body] = @a_body,
[b_body] = @b_body,
[img] = @img
Where
[ID] = @ID

End



با کد زیر که مثل اینزرت هم هست فقط اسم sp متفاوته اقدام به آپدیت می کنم



string contentid = Request.QueryString["id"].ToString();
Int32 conid = Convert.ToInt32(contentid);
SqlConnection scon_updcont = new SqlConnection(ConfigurationManager.ConnectionStrin gs["hoseinConnectionStringAdmin"].ToString());
scon_updcont.Open();
SqlCommand scom_updcont = new SqlCommand("sp_tblcontent_Update", scon_updcont);
scom_updcont.CommandType = CommandType.StoredProcedure;
scom_updcont.Parameters.AddWithValue("@ID", conid);
scom_updcont.Parameters.AddWithValue("@titr", TextBox1.Text);
scom_updcont.Parameters.AddWithValue("@writer", TextBox2.Text);
scom_updcont.Parameters.AddWithValue("@a_body", TextBox3.Text);
scom_updcont.Parameters.AddWithValue("@b_body", TextBox4.Text);
scom_updcont.Parameters.AddWithValue("@img", pathname.ToString());

scom_updcont.ExecuteNonQuery();


اما وقتی اجرا می کنم هیچ اروری نمیده و آپدیت نمی کنه!!!!

ممنون میشم راهنمایی کنین

spring69
سه شنبه 07 اردیبهشت 1389, 17:37 عصر
سلام.
نتیجه دستور scom_updcont.ExecuteNonQuery رو توی یه لیبل نمایش بده، ببین چند نمایش میده؟

komeil64
سه شنبه 07 اردیبهشت 1389, 17:51 عصر
منظورتونو متوجه نشدم؟!
نتیجش رو چطوری نشون بدم خروجی نداره!

spring69
سه شنبه 07 اردیبهشت 1389, 18:04 عصر
اگه این کد رو بنویسی، تعداد سطرهایی که تحت تاثیر دستور آپدیت تغییر کردن رو نشون میده:

Label1.Text=scom_updcont.ExecuteNonQuery().ToStrin g();

komeil64
سه شنبه 07 اردیبهشت 1389, 18:07 عصر
می زنه 1 !!!!
اما رکورد تغییر نمی کنه!

spring69
سه شنبه 07 اردیبهشت 1389, 18:09 عصر
پروسیجرت رو از داخل خود sql server اجرا کن و به پارامترهات مقدار بده ببین تغییر میکنه؟

komeil64
سه شنبه 07 اردیبهشت 1389, 18:19 عصر
با خود پراسیجر آپدیت می کنه



USE [hosein]
GO

DECLARE @return_value int

EXEC @return_value = [dbo].[sp_tblcontent_Update]
@ID = 4,
@titr = N'hgfh',
@writer = N'ghfh',
@a_body = N'ghfhgf',
@b_body = N'fh',
@img = N'gfhf'

SELECT 'Return Value' = @return_value

GO

komeil64
سه شنبه 07 اردیبهشت 1389, 18:49 عصر
جالبه !!! آی دی رو دستی هم دادم آپدیت نکرد به شکل زیر:


scom_updcont.Parameters.AddWithValue("@ID", "4");
با
scom_updcont.Parameters.AddWithValue("@ID", 4);

spring69
سه شنبه 07 اردیبهشت 1389, 18:59 عصر
پروسیجرت رو ساده تر کن بعد اجرا کن ببین.
به این صورت که شرط رو بردار و تعداد فیلدهایی که میخوای آپدیت بشن رو هم یکی کن.
اگه درست نشد من دیگه چیزی به ذهنم نمیرسه.
اگه خواستی برنامت رو آپ کن ببینمش.

ehsan2007
سه شنبه 07 اردیبهشت 1389, 19:09 عصر
شاید یکی از تکس باکس های شما خالی باشه اینجوری sp خودتو تعریف کن


ALTER Procedure [dbo].[sp_tblcontent_Update]
@ID int,
@titr nvarchar(200) = null,
@writer nvarchar(100)= null,
@a_body nvarchar(MAX)= null,
@b_body nvarchar(MAX)= null,
@img nvarchar(MAX)= null
As
Begin
Update tblcontent
Set
[titr] = @titr,
[writer] = @writer,
[a_body] = @a_body,
[b_body] = @b_body,
[img] = @img
Where
[ID] = @ID
End

komeil64
سه شنبه 07 اردیبهشت 1389, 19:14 عصر
آخه شرطی نداره!!!
آی دی مورد نظر رو آپدیت می کنه
ساده تر از این نمیشه!!!


Update tblcontent
Set

[titr] = @titr,
[writer] = @writer,
[a_body] = @a_body,
[b_body] = @b_body,
[img] = @img
Where
[ID] = @ID


توی آپدیت sp شرط رو مثل بقیه فیلد ها می فرستیم؟ کد من تقریبا مثل اینزرته با این تفاوت که می فرسته به sp آپدیت
یعنی شرط رو که اینجا ID هستش مثل بقیه باید بفرستیم؟!(این دقیقا مثل اینزرت میشه که!)



SqlConnection scon_updcont = new SqlConnection(ConfigurationManager.ConnectionStrin gs["hoseinConnectionStringAdmin"].ToString());
scon_updcont.Open();
SqlCommand scom_updcont = new SqlCommand("sp_tblcontent_Update", scon_updcont);
scom_updcont.CommandType = CommandType.StoredProcedure;
scom_updcont.Parameters.AddWithValue("@ID", conid);
scom_updcont.Parameters.AddWithValue("@titr", TextBox1.Text);
scom_updcont.Parameters.AddWithValue("@writer", TextBox2.Text);
scom_updcont.Parameters.AddWithValue("@a_body", TextBox3.Text);
scom_updcont.Parameters.AddWithValue("@b_body", TextBox4.Text);
scom_updcont.Parameters.AddWithValue("@img", pathname.ToString());

scom_updcont.ExecuteNonQuery();

spring69
سه شنبه 07 اردیبهشت 1389, 19:26 عصر
ببین، همون قسمت where رو پاک کن.
حالا باید تمام رکوردهات تغییر کنن.
یعنی یه چیزی مثل این(با توجه به نکته ای که آقای ehsan2007 فرمودن):






ALTERProcedure [dbo].[sp_tblcontent_Update]

@titr nvarchar(200)=null,

@writer nvarchar(100)=null,

@a_body nvarchar(MAX)=null,

@b_body nvarchar(MAX)=null,

@img nvarchar(MAX)=null

As

Begin

Update tblcontent

Set

[img] = 'a'


End

حالا باید همه ی رکوردهات، فیلد imgشون مساوی a بشه.
در ضمن، ممکنه یه کم ربطی نداشته باشه، ولی آیا تو کد اصلیت، کانکشنت رو close کردی؟
چون توی این کدی که گذاشتی این کار رو نکردی.

komeil64
سه شنبه 07 اردیبهشت 1389, 19:37 عصر
جالبه
sp رو این شکلی کردم:


ALTER Procedure [dbo].[sp_tblcontent_Update]
@ID int,
@titr nvarchar(200),
@writer nvarchar(100),
@a_body nvarchar(MAX),
@b_body nvarchar(MAX),
@img nvarchar(MAX)
As
Begin
Update tblcontent
Set
[titr] = @titr,
[writer] = @writer,
[a_body] = @a_body,
[b_body] = @b_body,
[img] = @img


End


و کد هم این شد:


SqlConnection scon_updcont = new SqlConnection(ConfigurationManager.ConnectionStrin gs["hoseinConnectionStringAdmin"].ToString());
scon_updcont.Open();
SqlCommand scom_updcont = new SqlCommand("sp_tblcontent_Update", scon_updcont);
scom_updcont.CommandType = CommandType.StoredProcedure;

scom_updcont.Parameters.AddWithValue("@ID", contentid);
scom_updcont.Parameters.AddWithValue("@titr", TextBox1.Text);
scom_updcont.Parameters.AddWithValue("@writer", TextBox2.Text);
scom_updcont.Parameters.AddWithValue("@a_body", TextBox3.Text);
scom_updcont.Parameters.AddWithValue("@b_body", TextBox4.Text);
scom_updcont.Parameters.AddWithValue("@img", Image1.ImageUrl.ToString());

scom_updcont.ExecuteNonQuery();
scon_updcont.Close();


آپدیت کرد اما همه رکوردهای همه فیلد ها رو به textbox1 تبدیل کرد!!!!

به نظر شما بی خیال sp بشم؟!!!

spring69
سه شنبه 07 اردیبهشت 1389, 19:53 عصر
چی چی رو بی خیال شی؟
تازه داری به نتیجه میرسی.
یکم ور برو بهش، میتونی درستش کنی.

komeil64
چهارشنبه 08 اردیبهشت 1389, 01:17 صبح
اگر از sq استفاده نکنم مشکلی نداره و کار می کنه
اما نمی دونم مشکل این sp چیه؟!

komeil64
چهارشنبه 08 اردیبهشت 1389, 19:26 عصر
این کد پیج لود منه:


try
{
string contentid = Request.QueryString["conid"].ToString();
string dastoor = Request.QueryString["re"].ToString();
if (dastoor == "del")
{
Panel1.Visible = true;
Panel2.Visible = false;
SqlConnection scon_delcont = new SqlConnection(ConfigurationManager.ConnectionStrin gs["hoseinConnectionStringAdmin"].ToString());
scon_delcont.Open();
SqlCommand scom_delcont = new SqlCommand("sp_tblcontent_DeleteRow", scon_delcont);
scom_delcont.CommandType = CommandType.StoredProcedure;
scom_delcont.Parameters.AddWithValue("@ID", contentid);

scom_delcont.ExecuteNonQuery();

Label2.Text = "حذف شد";
}
if (dastoor == "edit")
{
Panel1.Visible = false;
Panel2.Visible = true;
SqlConnection scon_editcont = new SqlConnection(ConfigurationManager.ConnectionStrin gs["hoseinConnectionStringAdmin"].ToString());
scon_editcont.Open();
SqlCommand scom_editcont = new SqlCommand("select * from tblcontent where ID=" + contentid, scon_editcont);
SqlDataReader dr = scom_editcont.ExecuteReader();
dr.Read();
TextBox1.Text = dr.GetString(1);
TextBox2.Text = dr.GetString(2);
TextBox3.Text = dr.GetString(3);
TextBox4.Text = dr.GetString(4);
Image1.ImageUrl = dr.GetString(5);
dr.Close();
scom_editcont.Clone();
scon_editcont.Close();

}
}
catch
{
Response.Redirect("del-edit.aspx");
}


که از کوئری استرینگ اطلاعات رو می گیره حذف می کنه یا توی تکست ها نشون میده

این کد هم کد آپدیت محتویاتیه که توی تسکت ها هست:


SqlConnection scon_updcont = new SqlConnection(ConfigurationManager.ConnectionStrin gs["hoseinConnectionStringAdmin"].ToString());
scon_updcont.Open();
SqlCommand scom_updcont = new SqlCommand("sp_tblcontent_Update", scon_updcont);
scom_updcont.CommandType = CommandType.StoredProcedure;

scom_updcont.Parameters.AddWithValue("@ID", contentid2);
scom_updcont.Parameters.AddWithValue("@titr", TextBox1.Text);
scom_updcont.Parameters.AddWithValue("@writer", TextBox2.Text);
scom_updcont.Parameters.AddWithValue("@a_body", TextBox3.Text);
scom_updcont.Parameters.AddWithValue("@b_body", TextBox4.Text);
scom_updcont.Parameters.AddWithValue("@img", Image1.ImageUrl.ToString());

scom_updcont.ExecuteNonQuery();
scon_updcont.Close();
TextBox1.Text = "";
TextBox1.Text = "";
TextBox2.Text = "";
TextBox3.Text = "";
TextBox4.Text = "";


فکر می کنم مشکل اینه که وقتی دکمه رو می زنم که آپدیت کنه و دوباره به همین صفحه بر می گرده کد های لود اطلاعات دوباره اجرا میشن اما!
کاری که کردم این بود که آخر دستورات دکمه آپدیت یه رکوئست گذاشتم می رفت یه صفحه دیگه دوباره بر می گشت اینجا اما بازم نشد!
همین کد رو توی یه صفحه جدا مقدار دهی کردم اجرا شد!!!!
این کدش:


SqlConnection scon_updcont = new SqlConnection(ConfigurationManager.ConnectionStrin gs["hoseinConnectionStringAdmin"].ToString());
scon_updcont.Open();
SqlCommand scom_updcont = new SqlCommand("sp_tblcontent_Update", scon_updcont);
scom_updcont.CommandType = CommandType.StoredProcedure;
scom_updcont.Parameters.AddWithValue("@ID", "13");
scom_updcont.Parameters.AddWithValue("@titr","11");
scom_updcont.Parameters.AddWithValue("@writer", "11");
scom_updcont.Parameters.AddWithValue("@a_body", "11");
scom_updcont.Parameters.AddWithValue("@b_body", "11");
scom_updcont.Parameters.AddWithValue("@img", "11");

scom_updcont.ExecuteNonQuery();

!!!!!!!!!!!!
خودم فکر می کنم مشکل با یه خط کد حل میشه ولی همونو نمی دونم
دوستان ممنون میشم راهنمایی کنین

spring69
چهارشنبه 08 اردیبهشت 1389, 20:11 عصر
اگه ميخواي كاري كني كه با زدن دكمه، دوباره كدهاي pageload‌ اجرا نشن، اين شرط رو چك كن، بعد اگر برقرار بود كدها رو اجرا كن:

if !IsPostBack

komeil64
پنج شنبه 09 اردیبهشت 1389, 01:19 صبح
نگفتم آخر با یه خط کد درست میشه! D:
ممنون حل شد
واقعا تشکر