الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

خطأ في كود حفظ بيانات Gridvie

بدأه nwn2007 في 31 أكتوبر 2009 · 3 رد · 471 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

لدي gridviw اضفت لها ثلاث textbx وايضا DropDownList وزر يقوم باضافة صفوف جديدة لها وهو يعمل بشكل صحيح ووضعت زر لحفظ جميع صفوف gridviw ولكن عندنا احفظ سجل واحد يحفظ بشكل صحيح ولكن عندما احفظ اكثر من صف تظهر لدي رسالة خطأ وهذا الكود الذي استخدمته

Dim rowIndex As Integer = 0
		Dim box4 As TextBox = DirectCast(Gridview1.Rows(rowIndex).Cells(1).FindControl("TextBox3"), TextBox)
		Dim box3 As TextBox = DirectCast(Gridview1.Rows(rowIndex).Cells(2).FindControl("TextBox2"), TextBox)
		Dim box2 As TextBox = DirectCast(Gridview1.Rows(rowIndex).Cells(3).FindControl("TextBox14"), TextBox)
		Dim box1 As DropDownList = DirectCast(Gridview1.Rows(rowIndex).Cells(3).FindControl("DropDownList5"), DropDownList)

		Dim sql As String
		Dim cmd1 As New OleDbCommand
		Dim cs As New OleDbConnection
		cs.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("dsl.mdb") & ";"
 For Each objItem In Gridview1.Rows
			sql &= "insert INTO tb2(saf, fsl ,stud_sa,stud_sa2 )"
			sql = sql & " VALUES "
			box1.Text = objItem.Cells(1).Text
			box2.Text = objItem.Cells(2).Text
			box3.Text = objItem.Cells(3).Text
			box4.Text = objItem.Cells(4).Text
			sql = sql & "('" & objItem.Cells(1).Text & "', '" & objItem.Cells(2).Text & "' , '" & objItem.Cells(3).Text & "' , '" & objItem.Cells(4).Text & "');"

		Next
		cs.Open()

		cmd1 = New OleDbCommand(sql, cs)
		cmd1.ExecuteReader()
		cs.Close()

وتظهر لدي رسالة الخطا التالية

Line 307:

Line 308: cmd1 = New OleDbCommand(sql, cs)

Line 309: cmd1.ExecuteReader()

Line 310: cs.Close()

Line 311: MsgBox("التسجيل بنجاح")

Source File: C:\Documents and Settings\Tabukedu\سطح المكتب\تجارب asp\قرد فيو\dsl\Default2.aspx.vb Line: 309

Stack Trace:

[OleDbException (0x80040e14): تم العثور على أحرف بعد نهاية عبارة SQL.]

System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) +99

System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +239

System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +351

System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +88

System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +195

System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) +128

System.Data.OleDb.OleDbCommand.ExecuteReader() +32

Default2.Button1_Click(Object sender, EventArgs e) in C:\Documents and Settings\Tabukedu\سطح المكتب\تجارب asp\قرد فيو\dsl\Default2.aspx.vb:309

System.Web.UI.WebControls.Button.OnClick(EventArgs e) +126

System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +135

System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBa

ckEvent(String eventArgument) +39

System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +37

System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +87

System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4177

#2

المشكلة هي أنك في حالة أكثر من سجل أنك تقوم بوضع أكثر من جملة insert في أمر OleDbCommand واحد. ما يجب أن تفعله هو إنشاء OleDbCommand جديد في كل حلقة و تنفيذه وحده.

ملاحظة:

استخدام الأمر cmd1.ExecuteReader خاطئ و قد يؤدي إلى مشاكل حيث أنه مخصص لأوامر القراءة و يفضل استخدام cmd1.ExecuteNonQuery()

ملاحظة أخرى:

حيث أن الحل الذي اقترحته يتضمن تنفيذ أكثر من أمر في وقت واحد قد يكون من المفيد استخدام transaction لجمع هذه الأوامر معاً. هذا ضروري في بعض السيناريوات و لكن ليس كلها.

#3

جزيت خيرا اخي العزيز ولكن لو تعدل الكود الموجود لاني تعبت كثيرا ولم اصل الى حل

مواضيع مشابهة