【问题标题】:ASP.NET - VB.NET input into MS-ACCESS with autoincrementASP.NET - 带有自动增量的 VB.NET 输入到 MS-ACCESS
【发布时间】:2012-04-08 21:12:48
【问题描述】:

我有一个名为 db.mdb 的 ms-access 数据库,它包含各种表。我正在使用 ASP.NET 和 VB.NET 创建一个帐户创建页面。

我正在尝试将页面中的字段输入到 ms-acess db,但是当我打开 db 时,尽管 web 开发没有显示任何错误,但没有输入任何值。

你能帮帮我吗?

这是代码:

Imports System.Data
Imports System.Data.OleDb
Imports System.Data.Odbc



Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub TextBox1_TextChanged(sender As Object, e As System.EventArgs) Handles txtName.TextChanged

    End Sub

    Protected Sub btnCreateAccount_Click(sender As Object, e As System.EventArgs) Handles btnCreateAccount.Click

        Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Brian\Documents\Visual Studio 2010\WebSites\WebSite3\db.mdb;User Id=admin;Password=;")

        Dim cmd As OleDbCommand = New OleDbCommand("INSERT INTO [USER] (UserName, UserSurname, Address, Country, TelNo, UserLogin, UserPassword, UserTypeID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", conn)




        If txtPass.Text = txtCPass.Text Then

            conn.Open()


            cmd.Parameters.Add("@UserName", OleDbType.VarChar, 255).Value = txtName.Text
            cmd.Parameters.Add("@UserSurname", OleDbType.VarChar, 255).Value = txtSurname.Text
            cmd.Parameters.Add("@Address", OleDbType.VarChar, 255).Value = txtUsername.Text
            cmd.Parameters.Add("@Country", OleDbType.VarChar, 255).Value = txtCountry.Text
            cmd.Parameters.Add("@TelNo", OleDbType.Integer).Value = txtTelNo.Text
            cmd.Parameters.Add("@UserLogin", OleDbType.VarChar, 255).Value = txtUsername.Text
            cmd.Parameters.Add("@UserPassword", OleDbType.VarChar, 255).Value = txtPass.Text
            cmd.Parameters.Add("@UserTypeID", OleDbType.VarChar, 255).Value = "U"





            cmd.ExecuteNonQuery()

            conn.Close()
            lblAccount.Visible = True



        End If

    End Sub
End Class

编辑:

所以我正在尝试对 UserID 字段进行自动编号。它被设置为访问数据库中的自动编号。每当我尝试从页面将详细信息输入页面时,它都不允许我,给我一个错误,即 AutoNumber 字段不能为 NULL。所以我添加了这段代码:

newID = Int32.Parse(cmd2.ExecuteScalar()) + 1

这样我就可以从表中的该列中获取最大数量并将其递增 1,然后使用其他命令添加。

cmd.Parameters.Add("@UserID", OleDbType.VarChar, 255).Value = newID

但是它给了我一个错误提示

Conversion from type 'DBNull' to type 'String' is not valid.

【问题讨论】:

    标签: asp.net sql vb.net ms-access auto-increment


    【解决方案1】:

    在调用 cmd2.ExecuteScalar() 函数之前,您还没有打开连接。第一个参数是错误的。应该是@UserID 而不是@Address。

    conn.Open()
    newID = Int32.Parse(cmd2.ExecuteScalar()) + 1
    'Not sure what is column type (Varchar or Int)
    cmd.Parameters.Add("@UserID", OleDbType.Integer, 2).Value = newID
    ...
    cmd.ExecuteNonQuery()
    conn.Close()
    

    【讨论】:

    • 啊,好的,谢谢。但现在它在这行 Dim cmd2 As OleDbCommand = New OleDbCommand("SELECT MAX(UserID) FROM USER", conn) 中给了我一个新错误,说“FROM”中有一个错误
    • 试试 - SELECT MAX(UserID) FROM [USER]
    • 谢谢.. 每个问题似乎都会导致另一个问题。我用新错误更新了问题
    • 如果 UserID 是 Column 中的自动编号,则不应放入 Insert 语句。 Access 会自行将其设置为下一个值。
    • 好的,所以我删除了该代码,它在 cmd.ExecuteNonQuery() 行给了我通常的错误(标准表达式中的数据类型不匹配。)
    猜你喜欢
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多