C#:System.Data.dll 中发生 'System.Data.SqlClient.SqlException' 类型的未处理异常
C#: Unhandled Exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
我查看了关于这个主题的类似问题,发现 none 可以与我自己的问题进行比较。有很多不同的方法可以触发相同的异常。
我是 C# 的新手,正在开发一个简单的登录表单,该表单将用户信息存储在数据库中,然后根据请求检索它。
在调试模式下,抛出异常的行是:
cmd.ExecuteNonQuery();
以前的运行没有抛出这个错误,只有当我添加一个 guid 或开始尝试散列我的密码时才会抛出这个错误。
Further information: 'Must declare the scalar variable "@Userguid".'
我查了一下,又一次得到了不同的答案,例如,有些人认为这与连接字符串有关,而对于他们的通讯员来说,这很可能是这样——但对我来说,我对字符串没有任何问题以前似乎不太可能。
这是我的按钮点击事件,异常抛出在:
private void Button_Click(object sender, RoutedEventArgs e)
{
CheckUserInput();
CheckPassInput();
//Can we create the account?
if (canProceedUserPass == true && canProceedPass == true)
{
//Add username and password to my SqlDb table 'Users'.
Username = NewUsername.Text;
Password = NewPassword.Password.ToString();
Guid userGuid = System.Guid.NewGuid();
string hashedPassword = Security.HashSHA1(Password + userGuid.ToString());
SqlConnection con = new SqlConnection(connectionstring);
using (SqlCommand cmd = new SqlCommand("INSERT INTO [Users] VALUES (@Username, @Password, @Userguid)", con))
{
cmd.Parameters.AddWithValue("@username", Username);
//HashSHA1 takes a hashed string as a parameter.
//Password is effectively replaced by the hash.
cmd.Parameters.AddWithValue("@password", Security.HashSHA1(Password));
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
MessageBox.Show("Thank you " + Username);
var myWindow = new MainWindow();
myWindow.Show();
this.Close();
}
}
我仍在努力完全理解它(它的复制代码是我刚刚为满足我的需要而配备的)。
谢谢。
您的查询包含 @Userguid
参数,但您尚未将其添加到 SqlCommand 的 Parameters
中。
由于您的命令文本不是存储过程调用,而是 "direct" 查询 - 应明确提供所有参数。
根据您的代码逻辑,您似乎应该添加行
cmd.Parameters.AddWithValue("@Userguid", userGuid);
但请注意 - AddWithValue
基本上不应使用,因为它可能会导致意外结果,而是使用 Add
并明确指定参数类型并设置参数值。有关详细信息,请参阅 Can we stop using AddWithValue already 文章。
我查看了关于这个主题的类似问题,发现 none 可以与我自己的问题进行比较。有很多不同的方法可以触发相同的异常。
我是 C# 的新手,正在开发一个简单的登录表单,该表单将用户信息存储在数据库中,然后根据请求检索它。
在调试模式下,抛出异常的行是:
cmd.ExecuteNonQuery();
以前的运行没有抛出这个错误,只有当我添加一个 guid 或开始尝试散列我的密码时才会抛出这个错误。
Further information: 'Must declare the scalar variable "@Userguid".'
我查了一下,又一次得到了不同的答案,例如,有些人认为这与连接字符串有关,而对于他们的通讯员来说,这很可能是这样——但对我来说,我对字符串没有任何问题以前似乎不太可能。
这是我的按钮点击事件,异常抛出在:
private void Button_Click(object sender, RoutedEventArgs e)
{
CheckUserInput();
CheckPassInput();
//Can we create the account?
if (canProceedUserPass == true && canProceedPass == true)
{
//Add username and password to my SqlDb table 'Users'.
Username = NewUsername.Text;
Password = NewPassword.Password.ToString();
Guid userGuid = System.Guid.NewGuid();
string hashedPassword = Security.HashSHA1(Password + userGuid.ToString());
SqlConnection con = new SqlConnection(connectionstring);
using (SqlCommand cmd = new SqlCommand("INSERT INTO [Users] VALUES (@Username, @Password, @Userguid)", con))
{
cmd.Parameters.AddWithValue("@username", Username);
//HashSHA1 takes a hashed string as a parameter.
//Password is effectively replaced by the hash.
cmd.Parameters.AddWithValue("@password", Security.HashSHA1(Password));
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
MessageBox.Show("Thank you " + Username);
var myWindow = new MainWindow();
myWindow.Show();
this.Close();
}
}
我仍在努力完全理解它(它的复制代码是我刚刚为满足我的需要而配备的)。
谢谢。
您的查询包含 @Userguid
参数,但您尚未将其添加到 SqlCommand 的 Parameters
中。
由于您的命令文本不是存储过程调用,而是 "direct" 查询 - 应明确提供所有参数。
根据您的代码逻辑,您似乎应该添加行
cmd.Parameters.AddWithValue("@Userguid", userGuid);
但请注意 - AddWithValue
基本上不应使用,因为它可能会导致意外结果,而是使用 Add
并明确指定参数类型并设置参数值。有关详细信息,请参阅 Can we stop using AddWithValue already 文章。