SQL错误:关键字'User'附近的语法不正确
我正在使用SQL将数据插入到使用C#的SQL数据库文件中,如下所示。
String cs = System.Configuration.ConfigurationManager.ConnectionStrings["connection1"].ConnectionString; SqlConnection conn = new SqlConnection(cs); String sql = "INSERT INTO User (login, password, status) " + "VALUES (@login, @password, @status)"; SqlCommand comm = new SqlCommand(sql, conn); comm.Parameters.Add("@login", System.Data.SqlDbType.VarChar); comm.Parameters.Add("@password", System.Data.SqlDbType.VarChar); comm.Parameters.Add("@status", System.Data.SqlDbType.Bit); try { conn.Open(); Console.WriteLine(conn.ToString()); comm.ExecuteNonQuery(); conn.Close(); return true; } catch (Exception ex) { throw (ex); } finally { conn.Close(); }
执行命令时出现以下错误。
INSERT INTO用户(login名,密码,状态)VALUES(@login,@ password,@status)
我该如何解决这个问题?
编辑:错过参数值添加..
comm.Parameters["@login"].Value = this.Username; comm.Parameters["@password"].Value = this._password; comm.Parameters["@status"].Value = this.Status;
User
是一个保留关键字 ,所以你必须使用方括号来明确你的意思是名为“用户”它的对象 ,即使用[User]
而不是User
。
用户是一个t-sql 保留关键字 。 将它括在方括号内可以解决这个问题。 例如INSERT INTO [User]
对数据库运行您的查询。 你可以使用declare sql关键字来定义你的variables并给它们赋值。 如果您需要计算variables值,请在conn.Open处设置断点,然后使用本地窗口来查看传入的值。另一个可供您使用的工具是Sql Profiler。 你可以开始一个跟踪然后运行你的程序。 在发布的代码已经运行后,您应该能够看到在configuration文件中执行的查询。
所有这些应该可以帮助你找出什么是错误的,当exception没有提供足够的信息时。
Sql Server Management Studio应该在你的sql语句中突出显示User关键字,很容易地显示你需要括号括起来,如下所示:[User]