2015-09-21 68 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 –