2015-01-11 29 views
-2

我得到以下错误,我一直在做很多研究在线重新解决,但我似乎无法找到正确的答案,一点帮助将不胜感激。 非常感谢C#错误必须声明标量变量

Error: Additional information: Must declare the scalar variable "@[email protected]".

//DepartmentName and Username are both foreign key from LoginDetails table and Department table 

SqlConnection cn = new SqlConnection(@"Data Source=PRINCENICHOLAS;Initial Catalog=Kids Company IT Asset;Integrated Security=True"); 
SqlCommand sqlcmdLogin = new SqlCommand("Insert into LoginDetails(Username,Password,PrivilegeCode) Values(@Username,@Password,@PrivilegeCode)", cn); 

sqlcmdLogin.Parameters.AddWithValue("@Username", txtEmpFirstName.Text + '.' + txtEmpSurname.Text); 
sqlcmdLogin.Parameters.AddWithValue("@Password", txtEmpPassword.Text); 
sqlcmdLogin.Parameters.AddWithValue("@PrivilegeCode", cboPrivilege.SelectedItem.ToString()); 
cn.Open(); 
sqlcmdLogin.ExecuteNonQuery(); 
cn.Close(); 
//Insert Employee Table 
SqlCommand sqlcmdEmp = new SqlCommand("Insert into Employee(FirstName,LastName,DOB,Email,PhoneNumber,JobRole,Username,DepartmentName) Values(@FirstName,@LastName,@DOB,@Email,@PhoneNumber,@JobRole,@[email protected])", cn); 
sqlcmdEmp.Parameters.AddWithValue("@FirstName", txtEmpFirstName.Text); 
sqlcmdEmp.Parameters.AddWithValue("@LastName", txtEmpSurname.Text); 
sqlcmdEmp.Parameters.AddWithValue("@DOB", dtpEmpDOB.Text); 
sqlcmdEmp.Parameters.AddWithValue("@Email", txtEmpEmail.Text); 
sqlcmdEmp.Parameters.AddWithValue("@PhoneNumber", txtEmpPhone.Text); 
sqlcmdEmp.Parameters.AddWithValue("@JobRole", txtJobRole.Text); 
sqlcmdEmp.Parameters.AddWithValue("@Username", txtEmpFirstName.Text + '.' + txtEmpSurname.Text); 
sqlcmdEmp.Parameters.AddWithValue("@DepartmentName", cboDeptName.SelectedItem.ToString()); 
cn.Open();  
sqlcmdEmp.ExecuteNonQuery(); 
cn.Close();​  
+0

你错过','你的sql命令中的参数之间...... – walther

+1

这个问题与C#无关。它应该被标记SQL –

+0

错误消息告诉你你需要知道的一切。 –

回答

3

你忘了你的sqlcmdEmp定义符合,

@Username, @DepartmentName 

到单独的参数名称。

既然你把它写成@[email protected],你的程序会期望它的确切名称。

使用using statement来处置您的SqlConnectionSqlCommand,而不是手动调用.Close()方法。

using(SqlConnection cn = new SqlConnection(connectionString)) 
using(SqlCommand cmd = cn.CreateCommand()) 
{ 
    // Define your command text 
    // Add your paramter values 
    // Open your connection 
    // Execute your query 
} 

不要将密码存储为纯文本。阅读:Best way to store password in database

而且不要使用AddWithValue方法。它可能有时会产生意想不到的结果。使用.Add() method或重载。阅读:Can we stop using AddWithValue() already?