Sql 表';用户';只能在使用列列表且启用标识插入时指定

Sql 表';用户';只能在使用列列表且启用标识插入时指定,sql,sql-server,Sql,Sql Server,我一直在努力使我的SQL Server数据库与我的aspx项目一起工作。我已经为从我的webform文本字段读取数据的用户创建了一个表。但是,无论出于何种原因,它都试图将我的用户表id列分配给我的web项目中的第一个文本框。我似乎想不出一个办法来解决它。你能帮我吗 CREATE TABLE [dbo].[Users] ( [Id] INT NOT NULL PRIMARY KEY, [Username] NVARCHAR(MAX) NULL, [Password] N

我一直在努力使我的SQL Server数据库与我的aspx项目一起工作。我已经为从我的webform文本字段读取数据的用户创建了一个表。但是,无论出于何种原因,它都试图将我的
用户
id
列分配给我的web项目中的第一个文本框。我似乎想不出一个办法来解决它。你能帮我吗

CREATE TABLE [dbo].[Users]
(
    [Id] INT NOT NULL PRIMARY KEY, 
    [Username] NVARCHAR(MAX) NULL, 
    [Password] NVARCHAR(MAX) NULL, 
    [Email] NVARCHAR(MAX) NULL, 
    [Name] NVARCHAR(MAX) NULL
)
在这里,我从webform中分配值:

SqlCommand cmd = new SqlCommand("insert into Users values('" + tbUname.Text + "','" + tbPass.Text + "','" + tbEmail.Text + "','" + tbName.Text + "','u')", con);
Web表单标记:

        <div class="center-page">
            <label class="col-xs-11">Username</label>
            <div class="col-xs-11">
                <asp:TextBox ID="tbUname" runat="server" CssClass="form-control" placeholder="Username"></asp:TextBox>

            </div>
            <label class="col-xs-11">Password</label>
            <div class="col-xs-11">
                <asp:TextBox ID="tbPass" runat="server" CssClass="form-control" placeholder="Password"></asp:TextBox>
            </div>
            <label class="col-xs-11">Confirm Password</label>
            <div class="col-xs-11">
                <asp:TextBox ID="tbCPass" runat="server" CssClass="form-control" placeholder="Confirm Password"></asp:TextBox>
            </div>
            <label class="col-xs-11">Name</label>
            <div class="col-xs-11">
                <asp:TextBox ID="tbName" runat="server" CssClass="form-control" placeholder="Name"></asp:TextBox>
            </div>

            <label class="col-xs-11">E-Mail</label>
            <div class="col-xs-11">
                <asp:TextBox ID="tbEmail" runat="server" CssClass="form-control" placeholder="Email"></asp:TextBox>
            </div>
            <br />
            <br />
            <br />
            <div class="col-xs-11 space-vert">
                <asp:Button ID="btSignup" runat="server" class="btn btn-success" Text="Sign Up" OnClick="btSignup_Click" />
            </div>
        </div>

用户名
密码
确认密码
名称
电子邮件




您只需在
insert
命令中明确指定要插入的列,如下所示:

INSERT INTO dbo.Users(Username, Password, Email, Name)
VALUES (@val1, @val2, @val3, @val4);

您只需在
insert
命令中明确指定要插入的列,如下所示:

INSERT INTO dbo.Users(Username, Password, Email, Name)
VALUES (@val1, @val2, @val3, @val4);

您的ID字段是自动递增的吗? 我想这不是因为我没看到你用

IDENTITY(1,1)
在create表中,然后需要在insert语句中使用它

INSERT INTO dbo.Users(Id,Username, Password, Email, Name)
VALUES (@val1, @val2, @val3, @val4,@val5);

您的ID字段是自动递增的吗? 我想这不是因为我没看到你用

IDENTITY(1,1)
在create表中,然后需要在insert语句中使用它

INSERT INTO dbo.Users(Id,Username, Password, Email, Name)
VALUES (@val1, @val2, @val3, @val4,@val5);
要解决这个问题: 替换此查询

SqlCommand cmd=new-SqlCommand(“插入用户值(“+tbUname.Text+”、“+tbPass.Text+”、“+tbEmail.Text+”、“+tbName.Text+”、“u”)、con)

这里有一个

SqlCommand cmd=new SqlCommand(“插入[dbo].[Users]([Username]、[Password]、[Email]、[Name])值(“+tbUname.Text+”、“+tbPass.Text+”、“+tbEmail.Text+”、“+tbName.Text+”)、con)

要解决此问题: 替换此查询

SqlCommand cmd=new-SqlCommand(“插入用户值(“+tbUname.Text+”、“+tbPass.Text+”、“+tbEmail.Text+”、“+tbName.Text+”、“u”)、con)

这里有一个


SqlCommand cmd=new SqlCommand(“插入[dbo].[Users]([Username]、[Password]、[Email]、[Name])值(“+tbUname.Text+”、“+tbPass.Text+”、“+tbEmail.Text+”、“+tbName.Text+”)、con)

-您不应该将SQL语句连接在一起-使用参数化查询来避免SQL注入-在insert语句中签出您需要提供的列列表。向用户(用户名、密码等)中插入值(……)另外:不要简单地将表中的每一列都设为
NVARCHAR(MAX)
,因为您懒得考虑适当的大小-投入时间,确保使用适当的数据类型和长度!如前所述,这是令人难以置信的可怕代码,因为它对sql注入非常开放。但是发生错误是因为insert语句末尾有一个额外的值“u”。这是干什么用的?密码永远不能用纯文本存储。始终对密码进行哈希和加密,并存储加密值。-您不应该将SQL语句连接在一起-而是使用参数化查询来避免SQL注入-在insert语句中签出您需要提供的列列表。向用户(用户名、密码等)中插入值(……)另外:不要简单地将表中的每一列都设为
NVARCHAR(MAX)
,因为您懒得考虑适当的大小-投入时间,确保使用适当的数据类型和长度!如前所述,这是令人难以置信的可怕代码,因为它对sql注入非常开放。但是发生错误是因为insert语句末尾有一个额外的值“u”。这是干什么用的?密码永远不能用纯文本存储。总是对密码进行散列和加密,并存储加密值。我明白了,谢谢。我想这会管用的。但无论出于何种原因,它都表示希望在id字段SqlCommand cmd=new SqlCommand(“插入用户(用户名、密码、电子邮件、名称)值(“+tbUname.Text+”、“+tbPass.Text+”、“+tbEmail.Text+”、“+tbName.Text+”)、con)中添加空值;必须声明标量变量“@tbUname”。我不明白为什么它认为我要将id设置为avarchar@janekjan当您只发布代码片段和部分DDL(与报告的错误不一致)时,很难提供帮助。如果你需要帮助,你需要投入更多的精力来提供信息。此外,学习调试代码。您通过代码生成sql语句-要调试它,您需要实际查看(并发布),以便其他人能够理解您的代码正在执行的操作,并将其与您声称正在执行的操作进行比较。我明白了,谢谢。我想这会管用的。但无论出于何种原因,它都表示希望在id字段SqlCommand cmd=new SqlCommand(“插入用户(用户名、密码、电子邮件、名称)值(“+tbUname.Text+”、“+tbPass.Text+”、“+tbEmail.Text+”、“+tbName.Text+”)、con)中添加空值;必须声明标量变量“@tbUname”。我不明白为什么它认为我要将id设置为avarchar@janekjan当您只发布代码片段和部分DDL(与报告的错误不一致)时,很难提供帮助。如果你需要帮助,你需要投入更多的精力来提供信息。此外,学习调试代码。您通过代码生成sql语句—要调试它,您需要实际查看(并发布),以便其他人能够理解您的代码正在执行的操作,并将其与您声称正在执行的操作进行比较。