我正在尝试创建注册页面,但它没有按计划进行。它不断抛出这个错误:
类型' System.Data.SqlClient.SqlException'的异常发生在System.Data.dll中但未在用户代码中处理
在我的表中,我有,
[userid] INT NOT NULL,
[username] VARCHAR (50) NULL,
这是我的c#代码
protected void Button1_Click(object sender, EventArgs e)
{
if (txtPassword.Text == txtConfirmPassword.Text)
{
string username = txtUsername.Text;
string password = txtPassword.Text;
string confirmpassword = txtConfirmPassword.Text;
string email = txtEmail.Text;
con.Open();
String str = "INSERT INTO users (userid, username, password, confirmpassword, email) VALUES(@userid, @username, @password, @confirmpassword, @email)";
SqlCommand cmd = new SqlCommand(str, con);
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", password);
cmd.Parameters.AddWithValue("@confirmpassword", confirmpassword);
cmd.Parameters.AddWithValue("@email", email);
cmd.ExecuteNonQuery();
lblMessage.Text = "OK!!!!!!!!!!!!!!!!!!!";
con.Close();
}
}
我不确定如何传递用户ID?
更新 需要将IDENTITY设置为数据库中的userid。谢谢大家
答案 0 :(得分:3)
您的代码尝试写入5个字段,但只传递4个参数
SqlCommand.Parameters集合中缺少@userid
参数。
现在有两种可能性。如果您的用户ID字段是IDENTITY列,则您不应为userid
字段传递任何内容,并且查询将变为
String str = @"INSERT INTO users (username, password, confirmpassword, email)
VALUES(@username, @password, @confirmpassword, @email)";
或者,如果是普通字段,则需要将该参数添加到SqlCommand参数集中。
答案 1 :(得分:1)
首先;如果isIdentity设置为true,则不传递userId参数。
其次,即使在您的connectionstring中提到它,但您在查询中通过CatalogName.dbo.TableName
调用您的表格。
"INSERT INTO dbName.dbo.users (username, password, confirmpassword, email) VALUES(@username, @password, @confirmpassword, @email)";