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

مشكلة فى عملية Insert هتجننى

بدأه shosho842000 في 22 فبراير 2009 · 1 رد · 814 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمته الله وبركاته

عندى مشكلة فى الكود بحيث انى لما بضيف سجلات فى datagrid انى عايزاه اضيف اكثر من سجل فى نفس الوقت من خلال الكود دا

Try

If cn.State = ConnectionState.Open Then cn.Close()

cn.Open()

For x As Integer = 0 To DataGridView1.Rows.Count - 2

Dim id1, name1, super1 As String

id1 = DataGridView1.Rows.Item(x).Cells(0).Value

name1 = DataGridView1.Rows.Item(x).Cells(1).Value

super1 = DataGridView1.Rows.Item(x).Cells(2).Value

cmd.Connection = cn

cmd.CommandType = CommandType.Text

cmd.Parameters.Clear()

cmd.CommandText = "insert into dept values (@id,@name,@super)"

cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = id1

cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = name1

cmd.Parameters.Add("@super", SqlDbType.VarChar).Value = super1

cmd.ExecuteNonQuery()

Next

MessageBox.Show("تم الحفظ ")

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try

هو بيضف وشغال حلو اوى بس طبعا لما اعمل id عبارة عن unique بيروح يعترض ليها علشان بيلف على السجلات كلها من اول وجديد

وطبعا لما اجى اضيف سجلات بيكون فى بيانات قديمة ولما اضيف سجلات جديدة بيضيف الاثنين القديم والجديد من تانى يعنى لو عندى 2 سجلات قديمة وجيت ضفت سجل واحد جديد بيضيف 3 سجلات

عايزاه ميضفش غير السجلات الجديدة بس

وشكرا

#2

السلام عليكــم ورحمـة الله وبركاتــة ،،

لحفظ الصفوف المضافة فقط، يمكن استخدام واحدة من التالي:

الطريقة الأولى:

قبل ان نضيف الصف نتأكد اولاً من انه ليس موجود في قاعدة البيانات :

Try
			If cn.State = ConnectionState.Open Then cn.Close()

			cn.Open()

			For x As Integer = 0 To DataGridView1.Rows.Count - 2

				Dim id1, name1, super1 As String

				id1 = DataGridView1.Rows.Item(x).Cells(0).Value
				name1 = DataGridView1.Rows.Item(x).Cells(1).Value
				super1 = DataGridView1.Rows.Item(x).Cells(2).Value

				'' '********لاحظ هنا***********
				Dim cmd2 As New SqlClient.SqlCommand("SELECT COUNT(*) FROM dept WHERE id=@id", cn)
				cmd2.Parameters.AddWithValue("@id", id1)
				Dim count As Integer = cmd2.ExecuteScalar()
				If count > 0 Then
					Continue For
				End If

				cmd.Connection = cn
				cmd.CommandType = CommandType.Text
				cmd.Parameters.Clear()

				cmd.CommandText = "insert into dept values (@id,@name,@super)"
				cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = id1
				cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = name1
				cmd.Parameters.Add("@super", SqlDbType.VarChar).Value = super1
				cmd.ExecuteNonQuery()
			Next
			MessageBox.Show("تم الحفظ ")
		Catch ex As Exception
			MessageBox.Show(ex.Message)
		End Try

الطريقة الثانية:

في حال كانت DataGridView مرتبطة بـ DataTable، فيمكننا ان نسئل عن الصفوف المضافة هكذا :

Try
			If cn.State = ConnectionState.Open Then cn.Close()

			cn.Open()

			'' '********لاحظ هنا***********
			''قد يحتاج هذا السطر إلى تغيير
			Dim tbl As DataTable = DataGridView1.DataSource

			'' '********لاحظ هنا***********
			For Each row As DataRow In tbl.Select(Nothing, Nothing, DataRowState.Added)
				Dim id1, name1, super1 As String
				id1 = row("id").ToString()
				name1 = row("name").ToString()
				super1 = row("super").ToString()

				cmd.Connection = cn
				cmd.CommandType = CommandType.Text
				cmd.Parameters.Clear()
				cmd.CommandText = "insert into dept values (@id,@name,@super)"
				cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = id1
				cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = name1
				cmd.Parameters.Add("@super", SqlDbType.VarChar).Value = super1
				cmd.ExecuteNonQuery()

				'' '********لاحظ هنا***********
				row.AcceptChanges()
			Next
			MessageBox.Show("تم الحفظ ")
		Catch ex As Exception
			MessageBox.Show(ex.Message)
		End Try

تم تعديل هذه المشاركة بواسطة HassanAlattas في 23 فبراير 2009 في 00:55

[وسط]لا اله الا انت سبحانك انى كنت من الظالمين

[/وسط]

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