我在 ' nchar'附近的语法不正确

时间:2015-01-14 12:38:29

标签: c# sql tsql

错误是在nchar附近说错误的语法这是visual studio建议的

错误表明第31行:

  

在预期条件的上下文中指定的非布尔类型的表达式,在' Name'附近。   int temp = Convert.ToInt32(com.ExecuteScalar());

我的代码在

之下
protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
       SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString);

       conn.Open();
       string checkuser = "select count(*) from [Table] where User Name=@User Name";
       SqlCommand com = new SqlCommand(checkuser, conn);

       com.Parameters.Add("@User Name", SqlDbType.NChar, 20).Value = TextBoxUN.Text;
       int temp = Convert.ToInt32(com.ExecuteScalar());           

       if (temp == 1)
       {
           Response.Write(" USER ALREADY EXISTS ");
       }


       conn.Close(); 
    }
}

2 个答案:

答案 0 :(得分:5)

如果您使用的数据库对象和参数名称不止一个单词,则需要使用方括号,如[User Name]

还可以使用using statement来处置您的SqlConnectionSqlCommand

using(SqlConnection conn = new SqlConnection(connString))
using(SqlCommand com = conn.CreateCommand())
{
    com.CommandText = "select count(*) from [Table] where [User Name] = @UserName";
    com.Parameters.Add("@UserName", SqlDbType.NChar, 20).Value = TextBoxUN.Text;
    conn.Open();
    int temp = Convert.ToInt32(com.ExecuteScalar()); 
}

作为最佳做法,为您的表名或列名使用多个单词。

答案 1 :(得分:1)

试试

string checkuser = "select count(*) from [Table] where [User Name]=@UserName"
SqlCommand com = new SqlCommand(checkuser, conn);

       com.Parameters.Add("@UserName", SqlDbType.NChar, 20).Value = TextBoxUN.Text;

如果列中包含空格,则应将列名包装在大括号中。因此,列名称User Name应该放在方括号' []'中,对于参数名称" @User Name",我不认为它会接受它你也不应该删除参数名中的空格。