2014-01-09 160 views
0

如何將行數據轉換爲字符串或文本並將其顯示到標籤中?我的問題是,當我點擊我的登錄按鈕,其中包含獲取行數據到標籤的SQL代碼,我的標籤中的結果是錯誤的。而不是文字。我怎樣才能將它轉換成字符串?將數據轉換爲字符串轉換vb.net 2010

這裏是我的代碼:

所有的
Private Sub cmdLog_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLog.Click 
     Dim connection As New SqlClient.SqlConnection 
     Dim command As New SqlClient.SqlCommand 
     Dim adaptor As New SqlClient.SqlDataAdapter 
     Dim dataset As New DataSet 
     Dim reader As MySqlDataReader = Nothing 
     Dim sapi 
     sapi = CreateObject("sapi.spvoice") 

     connection.ConnectionString = ("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Calupad\Desktop\HTF feat Yiyet\HTF feat Yiyet\Database1.mdf;Integrated Security=True;User Instance=True") 
     command.CommandText = "SELECT * FROM [Users] WHERE Username='" & txtUser.Text & "' AND Password ='" & txtPass.Text & "';" 
     txtWel.Text = "Welcome Back, " + txtUser.Text + "!....." 


     connection.Open() 
     command.Connection = connection 
     adaptor.SelectCommand = command 
     adaptor.Fill(dataset, "0") 

     txtStat.text = command.CommandText = "SELECT Status FROM [Users] WHERE Username = '" & txtUser.Text & "' ".ToString 

     txtStat.Text = stat 
       Dim count = dataset.Tables(0).Rows.Count 
     If count > 0 Then 

      MsgBox("Login Successful!" & vbNewLine & txtStat.Text, MsgBoxStyle.Information, "Access Granted") 
      sapi.speak(txtWel.Text) 
      Me.Hide() 
      Form1.Show() 
      frmMenu.Show() 
      txtUser.Clear() 
      txtPass.Clear() 
      tries = 3 
     Else 
      ctr = tries - 1 
      tries = ctr 
      sapi.speak(txtUser.Text + txtNot.Text) 
      MsgBox("Invalid Account!" + vbNewLine + "Attempts Remaining: " & tries, vbCritical, "Access Denied") 
      txtUser.Clear() 
      txtPass.Clear() 
      If tries = 0 Then 
       MsgBox("You've reached the maximum attempts!" + vbNewLine + "The program will be terminated.", vbCritical, "Terminated!") 
       Me.Close() 
      End If 
     End If 
    End Sub 
+0

什麼是'stat'在這裏:'txtStat.Text = stat'?我們看不到它在代碼中的任何地方聲明 – har07

+0

stat是我的字符串變量:)我已經聲明它 – user3172293

+0

我會再次粘貼我的代碼。等待:) – user3172293

回答

1

首先,檢查用戶名和密碼是弱,是肯定volnurable到SQL注入的方式。您正在檢查行的'count'是否大於零,然後用戶已成功登錄,因爲您應該只將count與1進行比較,而不是對行進行計數,請嘗試將行值與用戶具有的值進行比較輸入用戶名和密碼字段以及數據庫行返回的內容。

「黑客」可以簡單地輸入這一點,他將被允許根據你的代碼的邏輯登錄:

SQL INJECTION

你只需要檢索存儲dataset變量中的數據,你使用適配器填充。

假設你的數據庫表中包含像First_Name領域和「姓氏」,這裏是你怎麼能在你的窗體上的任何標籤控件顯示它們:

adaptor.Fill(dataset, "0") 
myFirstName.Text = dataset.Tables(0).Rows(0).Item("First_Name").ToString() 
myLastName.Text = dataset.Tables(0).Rows(0).Item("First_Name").ToString() 

您也可以檢索列,而不必知道它的命名這樣

myLabel.text = = dataset.Tables(0).Rows(0).Item(3).ToString() 
    'This will retrieve the 4th column from the table (zero based array) 

您還可以通過聲明一個變量清理你的代碼保存檢索到的表

adaptor.Fill(dataset, "0") 
Dim myTable as DataTable = dataset.Tables(0) 
myFirstName.Text = myTable.Rows(0).Item(0).ToString() 

希望這會有幫助

+0

謝謝,但是,我想要做的是獲得與登錄的用戶相同的狀態,狀態已存儲在數據庫中有3列爲用戶名,密碼和狀態的表。 – user3172293

+0

@ user3172293我修改了我的答案,提醒您注意SQL注入。狀態變量的聲明在哪裏? – Ahmad

+0

謝謝你的幫助,代碼運行良好:)上帝保佑你,真的! – user3172293