2015-09-21 66 views
-2

基本上我在做一個系統,用戶輸入名稱,電子郵件,密碼&用戶類型和這些輸入要保存到我的本地數據庫。 我想創建一個自動生成並遞增ID的主鍵ID,所以第一個輸入1,秒2,三等獎3項,等等Mysql主鍵ID問題

相反,我得到了一堆字母和隨機數等如下所示; d7a8675a-c7cf-406A-983f-370d5b96fa62

下面是我寫上的Visual Studio數據庫設計

CREATE TABLE [dbo].[Users] (
    [Id]  int IDENTITY(1,1) PRIMARY KEY, 
    [UserName] NCHAR (50) NULL, 
    [Email] NCHAR (50) NULL, 
    [Password] NCHAR (50) NULL, 
    [Role]  NCHAR (15) NULL 
); 

此外,我忘了提,當我訪問我的註冊。 aspx頁面,用戶可以填寫要插入到數據庫的字段,我在註冊按鈕上點擊以下內容,是否可能導致我的SQL代碼出現問題?

String insertQuery = "insert into Users (Id,UserName,Email,Password,Role) values (@Id ,@Uname ,@email ,@password ,@role)"; 
SqlCommand com = new SqlCommand(insertQuery, conn); 
com.Parameters.AddWithValue("@Id", newGUID.ToString()); 
com.Parameters.AddWithValue("@Uname",TextBoxUN.Text); 
com.Parameters.AddWithValue("@email", TextBoxEmail.Text); 
com.Parameters.AddWithValue("@password", TextBoxPass.Text); 
com.Parameters.AddWithValue("@role", DropDownListRole.SelectedItem.ToString()); 
+0

如何保存數據,顯示整個代碼 – lad2025

+0

另外我忘了提及,當我訪問我的Register.aspx頁面,其中用戶可以填寫要插入到數據庫中的字段我打電話給以下點擊Register按鈕,是否會導致我的SQL代碼出現問題? –

+2

所以你保存GUID'com.Parameters.AddWithValue(「@Id」,newGUID.ToString());'。跳過這一行,並允許工作'IDENTITY' – lad2025

回答

1

第一個變化表定義:

CREATE TABLE [dbo].[Users] (
    [Id]  int IDENTITY(1,1) PRIMARY KEY NOT NULL, 
    [UserName] NCHAR (50) NULL, 
    [Email] NCHAR (50) NULL, 
    [Password] NCHAR (50) NULL, 
    [Role]  NCHAR (15) NULL 
); 

和你的代碼:

String insertQuery = "insert into Users (UserName,Email,Password,Role) values (@Uname ,@email ,@password ,@role)"; 
SqlCommand com = new SqlCommand(insertQuery, conn); 
com.Parameters.AddWithValue("@Uname",TextBoxUN.Text); 
com.Parameters.AddWithValue("@email", TextBoxEmail.Text); 
com.Parameters.AddWithValue("@password", TextBoxPass.Text); 
com.Parameters.AddWithValue("@role", DropDownListRole.SelectedItem.ToString()); 

您需要跳過節省com.Parameters.AddWithValue("@Id", newGUID.ToString());,並允許IDENTITY填寫數值。

+0

This Works!非常感謝lad2025 10/10 –

+0

這是我再次!我剛剛意識到,現在發生的事情是,如果我必須同時創建賬戶,Id將正確地遞增1,所以賬戶1,2,3,4等等。但是,如果我刪除賬戶3,會發生什麼是剩餘的賬戶保持與以前的ID,因此接下來要創建的帳戶將是5,所以它會是1,2,4,5 ....我可能會得到一些建議來解決這個問題? –

+0

@BendanS我強烈建議你保留了身份值,因爲它是是身份是如何工作的,它不會重複使用已刪除的ID。想一想:「如果這個ID列被用作另一個表上的外鍵,那麼更改它們會很快變得複雜」。不要自行管理它。如果你仍然想這樣做搜索'填充IDENTITY列的差距' – lad2025

0

你的主鍵定義是錯誤的 試試這個:

CREATE TABLE [dbo].[Users] (
    [Id]  int NOT NULL AUTO_INCREMENT, 
    [UserName] NCHAR (50) NULL, 
    [Email] NCHAR (50) NULL, 
    [Password] NCHAR (50) NULL, 
    [Role]  NCHAR (15) NULL, 
    PRIMARY KEY (id) 
); 

編輯您的編輯後:

你爲什麼要在一個新的GUID填充作爲id參數?

它相當清楚,爲什麼你得到這些隨機字符串作爲你的ID ... 如果定義ID自動增加的數量,你沒有指定ID參數

+0

我編輯了主要問題 –

+1

另外Xeraphim,我試過了你的編輯,但它只是彈出提示「SQL80001:'AUTO_INCREMENT'附近的語法錯誤 –

+0

我已經刪除了GUID作爲ID參數,現在ID正在生成爲NULL –