2017-01-03 37 views
0

我嘗試在vb.net中創建一個登錄表單中使用SQLite與此代碼vb.net登錄使用SQLite

Imports System.Data.SQLite 

Public Class frmLogin 


    Private Sub btnlogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnlogin.Click 

     Dim table As DataTable = Nothing 
     Dim da As New SQLiteDataAdapter("Select * from user_tbl where username='" & txtuser.Text & "'and pass_id='" & txtpass.Text & "'", myconn) 
     Try 
      If txtuser.Text = "" And txtpass.Text = "" Then 
       MessageBox.Show("Please fill Username and Password", "Important", MessageBoxButtons.OK, MessageBoxIcon.Information) 
       txtuser.Focus() 

      Else 
       da.Fill(table) 
       If table.Rows.Count > 0 Then 
        frmMain.Show() 
        Me.Close() 
       Else 
        MessageBox.Show("login not successful") 
       End If 

       da.Dispose() 
      End If 

     Catch ex As Exception 
      MessageBox.Show(ex.ToString) 
     End Try 
    End Sub 

    Private Sub frmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     ConnectME() 
    End Sub 
End Class 

,但我一直在第26行得到一個錯誤「da.fill(表)」

下面是錯誤說:

enter image description here

+0

構建SQL的唯一正確方法是使用SQL參數。像這樣構建它可能會導致SQL注入攻擊,數據類型不匹配,格式化問題以及像'O'Brien'這樣的名稱出現的錯誤。此外,密碼永遠不應該以純文本形式存儲。使用一個連接並在應用程序的整個生命週期中保持開放也是不明智的。 – Plutonix

回答

0

這裏是你的代碼的兩行:

Dim table As DataTable = Nothing 

da.Fill(table) 

您沒有代碼介於該變量之間,它將一個對象分配給該table變量。你爲什麼驚訝這裏有一個問題?如果我告訴你填滿一個包,然後遞給你沒有包,那麼你到底要填充它呢?你不能,因爲你不能填充一個不存在的包,但你希望你的應用能夠填充不存在的DataTable

+0

對不起,實際刪除「=無」,但我仍然得到相同的問題 –

+0

刪除這沒有幫助。默認情況下,變量仍然是「Nothing」。如果你沒有給該變量賦一個'DataTable',那麼它就不會引用'DataTable'。我不得不想知道,如果您沒有看到創建的DataTable,那麼使用數據適配器有多少例子。我只是Binged「vb.net填充數據表」,第一場比賽是一個SO線程,在接受的答案的代碼中包含了「DataTable」的創建和填充。我會認爲這樣的搜索是最基本的研究。 – jmcilhinney