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

يسوي update بدل insert

مغلق
بدأه Eng.Fedail في 14 نوفمبر 2006 · 8 رد · 960 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

عندي مشكلة ببرنامجي بدل ما يضيف بالقاعده يسوي ابديت للمعلومات

برفقلكم البرنامج وان شاء الله تلاقون لي حل

 'Put user code to initialize the page here
		Dim rinfo As String = Request.Item("sinfo")
		Dim Con As SqlClient.SqlConnection = New SqlClient.SqlConnection
		Dim ConStr As String = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=support;Data Source=LAPTOP"
		Con.ConnectionString = ConStr
		Dim SQLStr As String = ""
		Dim Cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand
		Dim Adap As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
		Dim datasetse As New DataSet
		SQLStr = "Select email,pass ,fullname ,websiteurl ,redate From Tusers where uid = " + rinfo
		Cmd.CommandText = SQLStr
		Cmd.Connection = Con
		Con.Open()
		Adap.SelectCommand = Cmd
		Adap.Fill(datasetse)
		Con.Close()
		txtemail.Text = datasetse.Tables(0).Rows(0).ItemArray(0)
		txtname.Text = datasetse.Tables(0).Rows(0).ItemArray(2)
		txtsite.Text = datasetse.Tables(0).Rows(0).ItemArray(3)
		Label1.Text = "Welcom " + datasetse.Tables(0).Rows(0).ItemArray(2)
		pass = datasetse.Tables(0).Rows(0).ItemArray(1)
	End Sub

	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
		Dim Con As SqlClient.SqlConnection = New SqlClient.SqlConnection
		Dim ConStr As String = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=support;Data Source=LAPTOP"
		Con.ConnectionString = ConStr
		Dim SQLStr As String = ""
		Dim Cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand
		Dim Adap As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
		Dim datasetse As New DataSet

		lblerror.Visible = True

		If txtopass.Text = pass Then
			If txtnpass.Text.Length > 6 Then
				If txtnpass.Text = txtrnpass.Text Then
					SQLStr = "update Tusers set pass ='" + txtnpass.Text + "'"
					Cmd.CommandText = SQLStr
					Cmd.Connection = Con
					Con.Open()
					Cmd.ExecuteNonQuery()
					Con.Close()
				Else
					lblerror.Text = "check your new Passowrd"
				End If
			Else
				lblerror.Text = "Check Length"
			End If
		Else
			lblerror.Text = "Wrong Passowrd"
		End If
	End Sub
	Private Sub btninfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btninfo.Click
		Dim Con1 As SqlClient.SqlConnection = New SqlClient.SqlConnection
		Dim ConStr1 As String = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=support;Data Source=LAPTOP"
		Con1.ConnectionString = ConStr1
		Dim SQLStr1 As String = ""
		Dim Cmd1 As SqlClient.SqlCommand = New SqlClient.SqlCommand
		Dim Adap1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
		Dim datasetse1 As New DataSet


		If txtname.Text <> Nothing Then
			SQLStr1 = "update Tusers set fullname ='" + txtname.Text + "'"
			Cmd1.CommandText = SQLStr1
			Cmd1.Connection = Con1
			Con1.Open()
			Cmd1.ExecuteNonQuery()
			Con1.Close()
		End If

		If txtsite.Text <> Nothing Then
			SQLStr1 = "update Tusers set websiteurl ='" + txtsite.Text + "'"
			Cmd1.CommandText = SQLStr1
			Cmd1.Connection = Con1
			Con1.Open()
			Cmd1.ExecuteNonQuery()
			Con1.Close()

		End If
		If txtemail.Text <> Nothing Then
			SQLStr1 = "update Tusers set email ='" + txtemail.Text + "'"
			Cmd1.CommandText = SQLStr1
			Cmd1.Connection = Con1
			Con1.Open()
			Cmd1.ExecuteNonQuery()
			Con1.Close()
		End If

	End Sub
End Class

الزر الاول ينفذ امر الأبديت للقاعده أما الزر الثاني btninfo ما يسوي العملية يسوي ابديت للصفحة ويرجع المعلومات على ال text

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#2

انا مش شايف اي جملة sql فيها Insert كل جملك في الكود اللي فوق واحدة بس select والباقي كله update

ومش عارف بصراحه انت تقصد اي جزء بالظبط

المهم في جملة في ال sql لادخال البيانات هي كالأتي

insert into TableName (Column1,Cloumn@,...,) values (value1,value2,...,.)

ودي ممكن تحطها كقيمة للمتغير sqlstr الخاص بك في المكان اللي انت عايزه

#3

عزيزي انا قصدت insert يعني ادخل البيانات على القاعده يعني update

مشكلتي هي انه بالزر الثاني لايسوي update لبيانات الصفحة بل يسوي reload للبيانات بالصفحة بدل تحديثها بالقاعده

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#4

بسم الله الرحمن الرحيم

بعض الملاحظات على الجزء الاول من الكود

'Put user code to initialize the page here
		Dim rinfo As String = Request.Item("sinfo")
		Dim Con As SqlClient.SqlConnection = New SqlClient.SqlConnection
		Dim ConStr As String = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=support;Data Source=LAPTOP"
		Con.ConnectionString = ConStr
		Dim SQLStr As String = ""
		Dim Cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand
		Dim Adap As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
		Dim datasetse As New DataSet
		SQLStr = "Select email,pass ,fullname ,websiteurl ,redate From Tusers where uid = " + rinfo
		Cmd.CommandText = SQLStr
		Cmd.Connection = Con
		Con.Open()
		Adap.SelectCommand = Cmd
		Adap.Fill(datasetse)
		Con.Close()
		txtemail.Text = datasetse.Tables(0).Rows(0).ItemArray(0)
		txtname.Text = datasetse.Tables(0).Rows(0).ItemArray(2)
		txtsite.Text = datasetse.Tables(0).Rows(0).ItemArray(3)
		Label1.Text = "Welcom " + datasetse.Tables(0).Rows(0).ItemArray(2)
		pass = datasetse.Tables(0).Rows(0).ItemArray(1)
	End Sub

يكفي استخدام SqlDataAdapter لإظهار النتائج و لا يحتاج لإستخدام SqlCommand معاً

اقترح تنظيم الكود وتبسيطه كتالي

إضافة التالي في أعلى الصفحة 
Imports System.Data.SqlClient

Dim con as New SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=support;Data Source=LAPTOP")

Dim Adap As New SqlDataAdapter("Select email,pass ,fullname ,websiteurl ,redate From Tusers where uid = " & Request.Item("sinfo"), con)

Dim datasetse As New DataSet

		Try
	con.Open()
			''
			Adap.Fill(datasetse)

		txtemail.Text = datasetse.Tables(0).Rows(0).Item(1).ToString
		txtname.Text = datasetse.Tables(0).Rows(0).Item(1).ToString
		txtsite.Text = datasetse.Tables(0).Rows(0).Item(1).ToString
		Label1.Text = "Welcom " + datasetse.Tables(0).Rows(0).Item(1).ToString
		pass = datasetse.Tables(0).Rows(0).Item(1).ToString


		   Catch ex As Exception
			''
		''في حالة حدوث خطأ في التنفيذ اكتب الكود الذي تريده هنا 
		''
		Finally
			con.Close()
		End Try
		''

إذا كان تنفيذ الكود السابق في Page_load و لا تريد تنفيذه اثناء الضغط على اي زر قم بوضع الكود السابق تحت الشرط التالي

If Not Me.IsPostBack Then
	''
	''اكتب الكود السابق هنا
	''
End IF

طريقة حماية الصفحة بالصورة العشاوائية Captcha

/index.php?showtopic=117870

#5
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
		Dim Con As SqlClient.SqlConnection = New SqlClient.SqlConnection
		Dim ConStr As String = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=support;Data Source=LAPTOP"
		Con.ConnectionString = ConStr
		Dim SQLStr As String = ""
		Dim Cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand
		Dim Adap As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
		Dim datasetse As New DataSet

		lblerror.Visible = True

		If txtopass.Text = pass Then
			If txtnpass.Text.Length > 6 Then
				If txtnpass.Text = txtrnpass.Text Then
					SQLStr = "update Tusers set pass ='" + txtnpass.Text + "'"
					Cmd.CommandText = SQLStr
					Cmd.Connection = Con
					Con.Open()
					Cmd.ExecuteNonQuery()
					Con.Close()
				Else
					lblerror.Text = "check your new Passowrd"
				End If
			Else
				lblerror.Text = "Check Length"
			End If
		Else
			lblerror.Text = "Wrong Passowrd"
		End If
	End Sub

يكفي استخدام SqlCommand و لاتحتاج لإستخدام SqlDataAdapter

وكما هو ملاحظ انك لم تستخدم datasetse

ايضا لم تحدد اي سجل سيتم عليه التحديث بمعنى اعتقد يجب تحديد السجل كتالي

update Tusers set pass ='" + txtnpass.Text + "' where Column=value"

ايضا اقترح تنظيم الكود كتالي

	Dim con as New SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=support;Data Source=LAPTOP")
		Dim Cmd As New SqlCommand("update Tusers set pass ='" + txtnpass.Text + "'")
		Cmd.CommandType = CommandType.Text
		''
		''
	''وضع كود التنفيذ حسب الشرط...
		Try
			''
			con.Open()
			Cmd.Connection = con
			Cmd.ExecuteNonQuery()
			Cmd.Connection.Close()
			''
		Catch ex As Exception
			''
			''في حالة حدوث اي خطاء في التنفيذ اكتب الكود الذي تريده هنا
			''
		Finally
			conn.Close()
		End Try

طريقة حماية الصفحة بالصورة العشاوائية Captcha

/index.php?showtopic=117870

#6
	Private Sub btninfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btninfo.Click
		Dim Con1 As SqlClient.SqlConnection = New SqlClient.SqlConnection
		Dim ConStr1 As String = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=support;Data Source=LAPTOP"
		Con1.ConnectionString = ConStr1
		Dim SQLStr1 As String = ""
		Dim Cmd1 As SqlClient.SqlCommand = New SqlClient.SqlCommand
		Dim Adap1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
		Dim datasetse1 As New DataSet


		If txtname.Text <> Nothing Then
			SQLStr1 = "update Tusers set fullname ='" + txtname.Text + "'"
			Cmd1.CommandText = SQLStr1
			Cmd1.Connection = Con1
			Con1.Open()
			Cmd1.ExecuteNonQuery()
			Con1.Close()
		End If

		If txtsite.Text <> Nothing Then
			SQLStr1 = "update Tusers set websiteurl ='" + txtsite.Text + "'"
			Cmd1.CommandText = SQLStr1
			Cmd1.Connection = Con1
			Con1.Open()
			Cmd1.ExecuteNonQuery()
			Con1.Close()

		End If
		If txtemail.Text <> Nothing Then
			SQLStr1 = "update Tusers set email ='" + txtemail.Text + "'"
			Cmd1.CommandText = SQLStr1
			Cmd1.Connection = Con1
			Con1.Open()
			Cmd1.ExecuteNonQuery()
			Con1.Close()
		End If

نفس الملاحظات السابقة

في حالة الاستعلام Select استخدم SqlDataAdapter مع DataSet

في حالة استخدامك لعمليات Insert , Update , Delete استخدم SqlCommand

لم يتستخدم Adap1 و datasetse1 فلا داعي لتعريفها

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

update Tusers set fullname ='" + txtname.Text + "'"

update Tusers set websiteurl ='" + txtsite.Text + "'"

update Tusers set email ='" + txtemail.Text + "'"

اقتباس
الزر الاول ينفذ امر الأبديت للقاعده أما الزر الثاني btninfo ما يسوي العملية يسوي ابديت للصفحة ويرجع المعلومات على ال text
اقتباس
مشكلتي هي انه بالزر الثاني لايسوي update لبيانات الصفحة بل يسوي reload للبيانات بالصفحة بدل تحديثها بالقاعده

اعتقد وضع الشرط في Page_Load حيحل المشكلة

اقتباس
If Not Me.IsPostBack Then
	''
	''اكتب الكود السابق هنا
	''
End IF

طريقة حماية الصفحة بالصورة العشاوائية Captcha

/index.php?showtopic=117870

#7

الأخ kabrs الموضوع أنحل بطريقة page load

أشكرك من كل قلبي

واشكرك على توضيحك لأخطائي

ياليت لو تساعدني أكثر بموضوع sqlcommand - sqldataadapter

ومتى طريقة استخدامهم

لاحظت انك استعملت Imports System.Data.SqlClient ؟؟

بعدين طريقتك في أختصار الكود رائعة

أشكرك من كل قلبي

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#8

عزيز يوجد في ADO.NET طريقتين للإتصال بقاعدة البيانات

اتصال متصل و اتصال منفصل

الاتصال المتصل : يبقي قنات الاتصال Connection مفتوحة حتى تتم عملية الانتهاء من هدف الاتصال ثم يغلق الاتصال و يتم استخدام Command وقارئ البيانات DataReader

لذلك يفضل دائما استخدام SqlCommand في عمليات Insert,Update,Delete و ايضا يستخدم في Select للقيم الوحيدة او مجموعة سجلات بسيطة

مثال لإسترجاع قيمة وحيدة

Dim con As New OleDb.OleDbConnection("ConnectionString...")
Dim sql As String = "select count(*) from person"

con.Open()

Dim cmd As New OleDb.OleDbCommand(sql, con)
Label1.Text = cmd.ExecuteScalar().ToString

con.Close()

مثال لإسترجاع مجموعة سجلات

Dim con As New OleDb.OleDbConnection("ConnectionString...")
Dim DataReader1 As OleDb.OleDbDataReader
Dim sql As String = "select * from person"

con.Open()
Dim cmd As New OleDb.OleDbCommand(sql, con)
DataReader1 = cmd.ExecuteReader()
Do While DataReader1.Read()
Response.Write(rdName.GetString(1))
Loop
rdName.Close()

لا حظ هنا انه تم غلق الاتصال عند الوصول لأخر سجل

ثانياً : الاتصال المنفصل

و هذا يقوم بعملية الاتصال بقاعدة البيانات ثم سحب مجموعة من البيانات حسب جمل الاستعلام و تخزينها في مخزن مؤقت DataSet ثم غلق الاتصال

ويتم التعامل بعد ذلك مع DataSet كقاعدة بيانات مصغرة على الذاكرة تحتوي على مجموعة من الجداول يمكن انشاء العلاقات فيها و إجراء التعديلات ومن ثم إعادة البيانات إلى مصدرها وهذا ما يمييز قوة ADO.NET

يعني يتم إجراء التعديل او الحذف على DataSet و الاتصال مغلق مع قاعدة البيانات و بعد الانتهاء يتم تنفيذ جميع التغيرات التي حصلت على DataSet في قاعدة البيانات دفعة واحدة

و يتم التعامل معها بإستخدام DataAdaptor

ملاحظة : حسب تجربتي عملية التعديل او الحذف على DataSet تعمل فقط في Windows Application و لم تعمل معي في Web Application

اقتباس
لاحظت انك استعملت Imports System.Data.SqlClient ؟؟

هذا عبارة عن فضاء الاسماء NameSpace

و يسهل عليك كتابة الكود

بحيث يمكن كتابة جملة التعريف التالية

من

Dim Con As SqlClient.SqlConnection = New SqlClient.SqlConnection

إلى

Dim Con As SqlConnection = New SqlConnection

لا حظ اختصرنا SqlClient في الجملة الثانية

و بالتوفيق

تم تعديل هذه المشاركة بواسطة kabrs في 19 نوفمبر 2006 في 16:19

طريقة حماية الصفحة بالصورة العشاوائية Captcha

/index.php?showtopic=117870

#9

سلمت يا بعدي وجزاك الله خير وضحت لي الكثير

joseph.gif

logo.gif

CCNA 640-802

مدونتي

هذا الموضوع مغلق.

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