ASP.NET - вход VB.NET в MS-ACCESS с автоинкрементом - PullRequest
0 голосов
/ 24 марта 2012

У меня есть база данных ms-access под названием db.mdb, и она содержит различные таблицы. Я создаю страницу создания учетной записи с ASP.NET и VB.NET.

Я пытаюсь ввести поля на странице в ms-acess db, но когда я открываю db, значения не вводятся, несмотря на то, что веб-разработка не показывает никаких ошибок.

Можете ли вы помочь мне?

Это код:

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

EDIT:

Итак, я пытаюсь изменить номер поля 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.

1 Ответ

0 голосов
/ 24 марта 2012

Вы не открывали соединение до вызова 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...