请参阅代码段,我似乎无法找到我的错误,任何帮助都将不胜感激。例外是第一个参数add,(@ 0)。
错误:带有ParameterName' @ 0'的SqlParameter不包含在此SqlParameterCollection
中
代码:
using (SqlConnection conn = new SqlConnection(sqlConString))
{
SqlCommand insertQuery = new SqlCommand("INSERT INTO user_table (Username, Password, Name, Surname, DOB) VALUES ( @0, @1, @2, @3, @4 )", conn);
insertQuery.Parameters["@0"].Value = edtUsername.Text;
insertQuery.Parameters.AddWithValue("@1", edtPassword.Text);
insertQuery.Parameters.AddWithValue("@2", edtName.Text);
insertQuery.Parameters.AddWithValue("@3", edtSurname.Text);
insertQuery.Parameters.AddWithValue("@4", dateTimePicker.Text);
conn.Open();
insertQuery.ExecuteNonQuery();
conn.Close();
} // using conn
答案 0 :(得分:4)
此代码存在一些问题:
@0
,尝试在添加参数之前设置其值。 AddWithValue
. Use Add
instead. @0
,@1
等作为参数名称,而应使用有意义的名称。当只有5个参数但在任何地方使用有意义的名字是一个好习惯时,这并不重要。 DateTime
的实例传递。这样可以省去很多乱码格式的麻烦。更好的代码是这样的:
using (var conn = new SqlConnection(sqlConString))
{
using(var insertQuery = new SqlCommand("INSERT INTO user_table (Username, Password, Name, Surname, DOB) VALUES ( @Username, @Password, @Name, @Surname, @DOB)", conn))
{
// I'm assuming nvarchar as the data type, change it if needed....
insertQuery.Parameters.Add("@Username", SqlDbType.NVarChar).Value = edtUsername.Text;
// uniqueSalt can be stored as plain text in the database, but should be unique for each password.
insertQuery.Parameters.Add("@Password", SqlDbType.NVarChar).Value = HashPassword(edtPassword.Text, uniqueSalt);
insertQuery.Parameters.Add("@Name", SqlDbType.NVarChar).Value = edtName.Text;
insertQuery.Parameters.Add("@Surname", SqlDbType.NVarChar).Value = edtSurname.Text;
insertQuery.Parameters.Add("@DOB", SqlDbType.DateTime).Value = dateTimePicker.Value;
conn.Open();
insertQuery.ExecuteNonQuery();
}
}
string HashPassword(string password, string salt)
{
// TODO: Implement hashing with salt
}