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

مشكلة في Select Statement !

بدأه She في 3 مايو 2008 · 4 رد · 896 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ظهرت عندي مشكلة في ولا اعرف اين المشكلة تحديدا هل هي في select statement ام عند استخدام ExecuteReader()

حيث تظهر لي رسالة الخطأ التالية

Invalid attempt to read when no data is present

علما اني استخدم Microsoft visual studio 2005

---------

وهذا الكود:

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" Title="Untitled Page" %>
<script runat="server">
	Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
		'LOCAL VARIABLES
		Dim id As String = TextBox1.Text
		Dim password As String = TextBox2.Text

		'----creating the connection
		Dim cons As String = ConfigurationManager.ConnectionStrings("votingdbConnectionString").ConnectionString
		Dim con As New Data.SqlClient.SqlConnection
		con.ConnectionString = cons

		'--------creating the command
		Dim comSel As New Data.SqlClient.SqlCommand
		comSel.CommandText = "SELECT [CandidateName] FROM [CANDIDATE] WHERE ([CandidateID] = '" & id & "' AND [CandidatePassword] = '" & password & "')"
		comSel.CommandType = Data.CommandType.Text
		comSel.Connection = con
		Try
			con.Open()

			Dim rd As Data.SqlClient.SqlDataReader = comSel.ExecuteReader()

			Dim canName As String = rd.GetValue(1) ' get from column 1(second column) in DB	 
			If (rd.Read() = True) Then

				Session("name") = canName
				'moving from page to page
				Server.Transfer("cand-Page.aspx")	   
			End If

			rd.Close()

	   Catch ex As Exception
			Label4.Text = ex.Message
			Label4.Visible = True
		Finally

		End Try
		con.Close()

	End Sub

</script>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
	 <br />
	دخول المرشحين<br />
	<br />
	<asp:TextBox ID="TextBox1" runat="server">1234567891</asp:TextBox>
	<asp:Label ID="Label1" runat="server" Text="رقم السجل المدني"></asp:Label>

	<br />
	<asp:TextBox ID="TextBox2" runat="server" OnTextChanged="TextBox2_TextChanged" TextMode="Password"></asp:TextBox>

	<asp:Label ID="Label2" runat="server" Text="كلمة المرور"></asp:Label>  <br />
	<asp:Label ID="Label4" runat="server" Text="Label" Visible="False"></asp:Label>
	   <br />
	<asp:Button ID="Button1" runat="server" Text="الدخول" OnClick="Button1_Click" />

	<br />
</asp:Content>

-------

ارجو مساعدتي في معرفة الخطأ,,, وشكرا مقدما :)

تم تعديل هذه المشاركة بواسطة She في 3 مايو 2008 في 22:48

اللهم ما اصبح /امسى بي من نعمة أو بأحد من خلقك فمنك وحدك لا شريك لك فلك الحمد ولك الشكر

#2

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

المشكلة حتماً في هذا السطر

Dim canName As String = rd.GetValue(1) ' get from column 1(second column) in DB

جرب ادخلها في الدالة if

دالة .Read() تعيد true أو false فلا داعي للـ .Read()== true

أيضاً استعلام الـ SELECT خطأ منطقي و ليس برمجي لأنه معرض للـ SQL Injection و عليك استخدام الـ Parameters أو Stored Procedure لحماية الاستعلام عن الباسوورد

#3

شكرا السريع 3000 على تفاعلك معي:)

وضعت العبارة اللي قلت لي داخل if وطلع لي خطأ آخر

index was outside the bounds of array

رغم اني لم استخدم أي array في الكود!!

بحثت عنها في النت

ووجدت هذه الحلول

"Make sure that you have the RTM version of the stored procedures in the database.

Once I dropped the membership procedures and readded them the app functions fine"

وهذا رأي شخص آخر

"Updating the stored procedures will fix this issue.

I have updated the stored procedures and the app should function"

ولكني لم افهم ماذا يعنيا ن اعملupdate او drop لـ"stored procedure"??!!

-----

وانت قلت لي

يضاً استعلام الـ SELECT خطأ منطقي و ليس برمجي لأنه معرض للـ SQL Injection و عليك استخدام الـ Parameters أو Stored Procedure لحماية الاستعلام عن الباسوورد

سوف اتعلم كيف اعمل Stored Procedure وسأجربها

جزاك الله خيرا اخي السريع3000

اللهم ما اصبح /امسى بي من نعمة أو بأحد من خلقك فمنك وحدك لا شريك لك فلك الحمد ولك الشكر

#4

انا اتفق مع الاخ انه يكون dr.get داخل if بلوك و اعتقد ان الكويري احسن لوكان بالصورة التالية:

Dim comSel As New Data.SqlClient.SqlCommand(" SELECT [CandidateName] FROM [CANDIDATE] WHERE ([CandidateID] like '%" & id & "%' AND [CandidatePassword] = '" & password & "')",con)

Try

con.Open()

Dim rd As Data.SqlClient.SqlDataReader = comSel.ExecuteReader()

If (rd.Read()) Then

Session("name") =rd.GetValue(1).toString...............او..............Session("name") =rd.GetValue("CandidateName").toString

'moving from page to page

Server.Transfer("cand-Page.aspx")

End If

و الله أعلم

#5

شكرا star99m على تفاعلك معي :)

لكن الحمدلله انحلت المشكلة حيث اني غيرت

Dim canName As String = rd.GetValue(1)

الى

Dim canName As String = rd.GetValue(0)

كنت اعتقد ان الترتيب حسب قاعدة البيانات ,فاتضح لي انه حسب ترتيبها في Select

جزاكم الله خيرا:)

اللهم ما اصبح /امسى بي من نعمة أو بأحد من خلقك فمنك وحدك لا شريك لك فلك الحمد ولك الشكر

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