2014-03-05 63 views
0

有人帮我 我正在处理我们的项目,我需要检查我的数据库是否有20条记录。 如果是这样,那么它将不再接受记录。 我一直在试图代码如下:如何获得表中的记录数?

Public Class Form1 

Dim con As New OleDb.OleDbConnection 
Dim ds, ds2 As New DataSet 
Dim da, da2 As OleDb.OleDbDataAdapter 
Dim sql, sql1 As String 
Dim int As Integer 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

End Sub 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

    con.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0; data source = |datadirectory|\Database6.mdb" 
    con.Open() 
    Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("SELECT * FROM Accounts WHERE Username='" & TextBox1.Text & "'", con) 
    Dim sdr As OleDb.OleDbDataReader = cmd.ExecuteReader 
    Dim cmd1 As OleDb.OleDbCommand = New OleDb.OleDbCommand("SELECT * FROM Accounts") 
    sql = "INSERT INTO Accounts ([Username], [Password], [FirstName], [LastName]) VALUES ('" & TextBox1.Text & "','" & TextBox2.Text & "', '" & TextBox3.Text & "','" & TextBox4.Text & "') " 
    sql1 = "SELECT Count([AccountID]) FROM Accounts" 

    cmd = New OleDb.OleDbCommand(sql, con) 
    cmd1 = New OleDb.OleDbCommand(sql1, con) 
    Convert.ToInt32(sql1) 
    cmd1.ExecuteScalar() 
    If sql1 < 20 Then 
     MsgBox("Cannot accept records") 
    ElseIf sdr.HasRows = False Then 
     cmd.ExecuteNonQuery() 
     MsgBox("Account Added") 
    ElseIf sdr.HasRows = True Then 
     MsgBox("Username is taken") 
    End If 


    con.Close() 
End Sub 

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    Me.Hide() 
    Form2.Show() 
End Sub 
End Class 

但转换代码触发一个错误:

输入字符串的格式不正确

但如果我删除代码转换它给了我错误

从字符串“SELECT Count([AccountID])F ROM A“键入'Double'无效。”

请帮助我。
TIA

+0

尝试在您的文本框中输入:''; drop Database6;'/ kidding,do not that that!但我强烈建议阅读关于SQL注入http://en.wikipedia.org/wiki/SQL_injectionattacks。 – mxmissile

+0

是的。我完全了解SQL注入。但这不是我们项目的重点。我们只需要显示添加第20条记录后,数据库不能再接受记录。你能帮我吗? – Bampie

+2

第一块帮助 - 这不是VBA。如果你正确地标记你的问题,你的机会将会提高。 –

回答

1

我不知道VB一切都好,这是来自我的头顶。你试图转换你的SQL文本,这将永远不会工作。尝试这样的:

dim result as object 
result = cmd1.ExecuteScalar() 
dim count as int 
count = Convert.ToInt32(result) 
If count < 20 Then 
+0

将尝试这一个。 – Bampie

+1

这工作!谢谢你,先生! – Bampie

+1

@Bampie:如果上面的答案有帮助,请不要忘记接受/ upvote。 – Neolisk