2012-03-24 20 views
0

私はdb.mdbと呼ばれるmsアクセスデータベースを持っており、さまざまなテーブルがあります。私は、ASP.NETとVB.NETを使ってアカウント作成ページを作成しています。ASP.NET - 自動インクリメントによるMS-ACCESSへの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 

EDIT:

だから私は、ユーザーIDフィールドをオートナンバーしようとしています。これは、アクセスデータベースから自動番号として設定されます。ページの詳細をページのページに入力しようとすると、それは私に許可されず、オートナンバー型フィールドをNULLにできないというエラーが表示されます。 Iは、テーブル内のその列の最大数を取得し、1をインクリメントした後、他のコマンドが付加されたように

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

:だから、コードの一部を追加しました。

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

しかしその私に

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

答えて

0

あなたはcmd2.ExecuteScalar()関数を呼び出す前に、接続をオープンしていないというエラーを与えます。そして最初のパラメータは間違っています。 @Addressではなく@UserIDでなければなりません。

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() 
+0

ああありがとうございます。今度は私にこの行の新しいエラーを出す 'Dim cmd2 As OleDbCommand =新しいOleDbCommand(" SELECT MAX(UserID)FROM USER "、conn)'のエラーを 'FROM'に伝える – Brian

+0

Try - SELECT MAX(UserID) FROM [USER] –

+0

ありがとうございました..すべての問題は別の問題につながっているようです。新しいエラー – Brian