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

سؤال فى اضافه بيانات الى Datagrid

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

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

يوجد لدى مشكله فى الاضافه حيث يتم اضافه السجلات كلها من اول وجديد ؟؟؟؟

دلوقتى لو دخلت سجل جديد فى datagrid بيروح يضيف ليا السجلات القديمه من تانى ويظهر رساله اعتراض ان الرقم pk لا يمكن تكراره

الكود كالاتى :

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

		cn.Open()

		For x As Integer = 0 To DataGridView1.Rows.Count - 2
			'If DataGridView1.Rows(x).Cells(0).Value = "" Then
			Dim id As Integer
			Dim name, super As String
			Dim cmd2 As New SqlClient.SqlCommand("SELECT COUNT(*) FROM dept WHERE id=@id", cn)
			cmd2.Parameters.AddWithValue("@id", id)
			Dim count As Integer = cmd2.ExecuteScalar()
			If count > 0 Then
				Continue For
			End If
			id = DataGridView1.Rows.Item(x).Cells(1).Value
			name = DataGridView1.Rows.Item(x).Cells(2).Value
			super = DataGridView1.Rows.Item(x).Cells(3).Value
			cmd.Connection = cn
			cmd.Parameters.Clear()
			cmd.CommandType = CommandType.StoredProcedure
			cmd.CommandText = "insertdept"
			cmd.Parameters.Add("@id", SqlDbType.Int).Value = id
			cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = name
			cmd.Parameters.Add("@super", SqlDbType.VarChar).Value = super
			'cmd.Parameters.Add("@ErId", SqlDbType.Int).Direction = ParameterDirection.Output
			cmd.ExecuteNonQuery()

		Next
		'If cmd.Parameters("@ErId").Value > 0 Then
		'	MsgBox("لم يتم الحفظ")
		'Else
		MsgBox("تم الحفظ")
		'End If
#2

هو الى بيحصل انه بيقوم بحذف السجل الاخير الذى قومنا بالكتابه فيه ويضيف اخر سجل تانى علشان كدا بيعترض

#3

قومي بتبديل السطر التالي :

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

بهذا :

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

كي لا تتجاهلي السطر الأخير من الداتاجريدفيو

في حالة بقاء الاعتراض, المرجو إرفاق نص رسالة الخطأ و السطر الذي يقع فيه الخطأ

#4

نص الرساله الخطا

Violation of PRIMARY KEY constraint 'PK_dept'. Cannot insert duplicate key in object 'dbo.dept'. The statement has been terminated.

الخطا فى cmd.ExecuteNonQuery()

#5

نص الرسالة يدل على أن هناك محاولة زيادة تسجيل بمرجع مفتاح رئيسي موجود قبلا على الجدول.

أنظري معي هذا المقطع من الكود :

			Dim id As Integer
			Dim name, super As String
			Dim cmd2 As New SqlClient.SqlCommand("SELECT COUNT(*) FROM dept WHERE id=@id", cn)
			cmd2.Parameters.AddWithValue("@id", id)
			Dim count As Integer = cmd2.ExecuteScalar()

المتغير id معرف لكن لم تتم إحالة أية قيمة إليه. أظن أنك تريدين تحديد المتغير id بقيمة الخلية رقم 0 من السطر الحالي في اللوب.

#6

بقوم بتعريفه وارسال اليه قيمه من خلال السطر التالى

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

#7

ذاك السطر يجب أن يكون قبل تحديد البارامتر لجملة سكل select coun(*)

أنظري مقطع الكود الذي أرفقته في ردي السابق, أنت تستعملين المتغير id في جملة سكل select count(*) قبل تهيئته بمرجع التسجيل المراد التحقق من وجوده على الجدول.

#8

عدلت الكود بس ظهر الكود دا

Procedure or Function 'insertdept' expects parameter '@name', which was not supplied.

وانا مررها

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

#9

بالنسبة للبرامترز التي تقبل قيم بصيغة نصوص (String) فهي تحتاج إلى تحديد الخاصية Size بعدد الحروف التي بالنص. مثال :

cmd.Parameters("@name").Size = name.Length

زيدي الكود لكل برامتر يقبل نص مع تحرير الكود للعمل مع كل برمتر.

#10

قمت بعمل الاتى والاعتراض

An SqlParameter with ParameterName 'name' is not contained by this SqlParameterCollection.

هذه رساله الخطا

#11

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

هذا هو المشروع مع قاعده البيانات وشكرااااا

WindowsApplication4.rar

1.txt

3.txt

#12

لو أمكن أن ترسلي الكود المعدل

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

		cn.Open()

		For x As Integer = 0 To DataGridView1.Rows.Count - 1
			'If DataGridView1.Rows(x).Cells(0).Value = "" Then
			Dim id As Integer
			Dim name, super As String
			Dim cmd2 As New SqlClient.SqlCommand("SELECT COUNT(*) FROM dept WHERE id=@id", cn)
			id = DataGridView1.Rows.Item(x).Cells(1).Value
			cmd2.Parameters.AddWithValue("@id", id)
			Dim count As Integer = cmd2.ExecuteScalar()
			If count > 0 Then
				Continue For
			End If
			name = DataGridView1.Rows.Item(x).Cells(2).Value
			super = DataGridView1.Rows.Item(x).Cells(3).Value
			cmd.Connection = cn
			cmd.Parameters.Clear()
			cmd.CommandType = CommandType.StoredProcedure
			cmd.CommandText = "insertdept"
			cmd.Parameters.Add("@id", SqlDbType.Int).Value = id
			cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = name
			cmd.Parameters("name").Size = 50
			cmd.Parameters.Add("@super", SqlDbType.VarChar).Value = super
			'cmd.Parameters.Add("@ErId", SqlDbType.Int).Direction = ParameterDirection.Output
			cmd.ExecuteNonQuery()

		Next
		'If cmd.Parameters("@ErId").Value > 0 Then
		'	MsgBox("لم يتم الحفظ")
		'Else
		MsgBox("تم الحفظ")
		'End If

دا الكود كامل بعد التعديل

ودى رساله الخطا الى بتظره

An SqlParameter with ParameterName 'name' is not contained by this SqlParameterCollection.

ويتم الوقوف على هذا السطر

cmd.Parameters("name").Size = 50

#14

نسيتي الكركتر @ في اسم البرمتر :

cmd.Parameters("@name").Size = name.Length

و كذلك يجب أن تهيئي نفس الخاصية للبرمتر @super بنفس الطريقة

#15

تم الاعتراض ايضا على الاسم

Procedure or Function 'insertdept' expects parameter '@name', which was not supplied.

ويتم الوقوف على هذا السطر

cmd.ExecuteNonQuery()

دا الكود بعد التعديل

  For x As Integer = 0 To DataGridView1.Rows.Count - 1
			'If DataGridView1.Rows(x).Cells(0).Value = "" Then
			Dim id As Integer
			Dim name, super As String
			Dim cmd2 As New SqlClient.SqlCommand("SELECT COUNT(*) FROM dept WHERE id=@id", cn)
			id = DataGridView1.Rows.Item(x).Cells(1).Value
			cmd2.Parameters.AddWithValue("@id", id)
			Dim count As Integer = cmd2.ExecuteScalar()
			If count > 0 Then
				Continue For
			End If
			name = DataGridView1.Rows.Item(x).Cells(2).Value
			super = DataGridView1.Rows.Item(x).Cells(3).Value
			cmd.Connection = cn
			cmd.Parameters.Clear()
			cmd.CommandType = CommandType.StoredProcedure
			cmd.CommandText = "insertdept"
			cmd.Parameters.Add("@id", SqlDbType.Int).Value = id
			cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = name
			cmd.Parameters("@name").Size = 50
			cmd.Parameters.Add("@super", SqlDbType.VarChar).Value = super
			cmd.Parameters("@super").Size = 50			'cmd.Parameters.Add("@ErId", SqlDbType.Int).Direction = ParameterDirection.Output
			cmd.ExecuteNonQuery()

		Next
		'If cmd.Parameters("@ErId").Value > 0 Then
		'	MsgBox("لم يتم الحفظ")
		'Else
		MsgBox("تم الحفظ")
		'End If
#16

الكود صحيح أختي الكريمة, إذا كان محتوى خلية يساوي Nothing يعتبره SQL Server و كأنك لم تحددي البرمتر لـ stored procedure. لحل المشكلة يجب التأكد من وجود قيمة صحيحة في كل خلية قبل تنفيذ الكود.

الخطأ في قيمة البرامتر (الخلية فارغة) و ليس في الكود.

#17

الخليه يوجد بها قيمه ويتم الاعتراض ايضا

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…