【问题标题】:sql insert into asp.netsql插入asp.net
【发布时间】:2013-01-26 13:04:43
【问题描述】:
con.Open();
SqlCommand cmd=new SqlCommand("INSERT INTO user(Firstname,Lastname,Email,Pass,Type)
    values(@first,@last,@email,@pass,@type)",con);
cmd.Parameters.Add("@first",SqlDbType.NVarChar).Value = txtfirst.Text;
cmd.Parameters.Add("@last",SqlDbType.NVarChar).Value = txtlast.Text;
cmd.Parameters.Add("@email",SqlDbType.NVarChar).Value = txtemail.Text;
cmd.Parameters.Add("@pass",SqlDbType.NVarChar).Value = txtpass.Text;
cmd.Parameters.Add("@type",SqlDbType.NVarChar).Value = "customer";
cmd.ExecuteNonQuery();
con.Close();

我的语法有什么问题,它说“关键字'用户'附近的语法不正确。”

【问题讨论】:

  • 向我们展示您的连接字符串。 SQL 没有任何问题。似乎您的连接字符串未正确设置为指向特定数据库
  • 另外,请使用cmd.Parameters.AddWithValue() 而不是已弃用的cmd.Parameters.Add()
  • 是的,user 是一个关键字。 JW。给出了解决方案

标签: c# asp.net sql sql-server


【解决方案1】:

您应该使用分隔标识符转义表名user

SqlCommand cmd=new SqlCommand("INSERT INTO [user] (Firstname,Lastname,Email,Pass,Type) values(@first,@last,@email,@pass,@type)",con);

更新 1

重构你的代码

  • 使用using 语句正确处理对象
  • 使用Try-Catch 块正确处理异常

代码sn-p:

string _connStr = "connectionString here";
string _query = "INSERT INTO [user] (Firstname,Lastname,Email,Pass,Type) values (@first,@last,@email,@pass,@type)";
using (SqlConnection conn = new SqlConnection(_connStr))
{
    using (SqlCommand comm = new SqlCommand())
    {
        comm.Connection = conn;
        comm.CommandType = CommandType.Text;
        comm.CommandText = _query;
        comm.Parameters.AddWithValue("@first", txtfirst.Text);
        comm.Parameters.AddWithValue("@last", txtlast.Text);
        comm.Parameters.AddWithValue("@email", txtemail.Text);
        comm.Parameters.AddWithValue("@pass", txtpass.Text);
        comm.Parameters.AddWithValue("@type", "customer");
        try
        {
            conn.Open();
            comm.ExecuteNonQuery();
        }
        catch(SqlException ex)
        {
            // other codes here
            // do something with the exception
            // don't swallow it.
        }
    }
}

【讨论】:

  • 尝试使用存储过程和输入验证将省去你的麻烦。
【解决方案2】:

USER 是 SQL Server 上的 reserved keyword

您应该使用带括号的表名[] like;

INSERT INTO [user]

你可以试试;

con.Open();
SqlCommand cmd=new SqlCommand("INSERT INTO [user] (Firstname,Lastname,Email,Pass,Type) values(@first,@last,@email,@pass,@type)",con);
cmd.Parameters.AddWithValue("@first", txtfirst.Text);
cmd.Parameters.AddWithValue("@last", txtlast.Text);
cmd.Parameters.AddWithValue("@email", txtemail.Text);
cmd.Parameters.AddWithValue("@pass", txtpass.Text);
cmd.Parameters.AddWithValue("@type", "customer");
cmd.ExecuteNonQuery();
con.Close();

也像 @JW 所说,在 try-catch 语句中使用它们总是一个好方法。

【讨论】:

    猜你喜欢
    • 2013-05-05
    • 2018-01-10
    • 2015-07-09
    • 2011-06-17
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    相关资源
    最近更新 更多