C# C中的SqlCommand和connection出错#
此代码有错误,但找不到问题。请帮忙C# C中的SqlCommand和connection出错#,c#,sql-server,C#,Sql Server,此代码有错误,但找不到问题。请帮忙 SqlConnection myConnection = new SqlConnection(@"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = C:\Software Project\BakeryProject Pages\BakeryProject\Databases\Users.mdf; Integrated Security = True"); myConnection.Open();
SqlConnection myConnection = new SqlConnection(@"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = C:\Software Project\BakeryProject Pages\BakeryProject\Databases\Users.mdf; Integrated Security = True");
myConnection.Open();
string commandText = "INSERT INTO Table (Id, Username, First_name, Last_Name, Password, Client, Staff, Admin )";
commandText += "VALUES (1, 'JohnSmith', 'John', 'Smith', 'Pass1', 'Client');";
SqlCommand myCommand = new SqlCommand(commandText, myConnection);
myCommand.Parameters.AddWithValue("@Id", mID);
myCommand.Parameters.AddWithValue("@Username", mUsername);
myCommand.Parameters.AddWithValue("@First_name", mNameFirst);
myCommand.Parameters.AddWithValue("@Last_name", mNameLast);
myCommand.Parameters.AddWithValue("@Password", mPassword);
myCommand.Parameters.AddWithValue("@Client", mClient);
myCommand.ExecuteNonQuery();
您正在尝试添加参数,但从未在查询中定义任何参数。也许这就是你的意思:
string commandText = "INSERT INTO [Table] (Id, Username, First_name, Last_Name, Password, Client) ";
commandText += "VALUES (@Id, @Username, @First_name, @Last_name, @Password, @Client);";
SqlCommand myCommand = new SqlCommand(commandText, myConnection);
myCommand.Parameters.AddWithValue("@Id", mID);
myCommand.Parameters.AddWithValue("@Username", mUsername);
myCommand.Parameters.AddWithValue("@First_name", mNameFirst);
myCommand.Parameters.AddWithValue("@Last_name", mNameLast);
myCommand.Parameters.AddWithValue("@Password", mPassword);
myCommand.Parameters.AddWithValue("@Client", mClient);
myCommand.ExecuteNonQuery();
注意:我还从脚本中删除了Staff
和Admin
列,因为它们没有下面提到的参数。这应该会给你一个正确的方向
作为补充说明,使用字符串文字在C#中声明查询要容易得多。这样,您就不必处理+=
和由此产生的奇怪的间距问题:
string commandText =
@"
Insert [Table] (Id, Username, First_name, Last_Name, Password, Client)
Values (@Id, @Username, @First_name, @Last_name, @Password, @Client);
";
您具体遇到了哪些错误?您列出了8列,但您只有6个值,可能会删除Staff和Admin?一个明显的问题是
commandText+=“值”
。您必须在commandText+=“值”
之前添加一个空格,以便它可以采用正确的SQL格式。@granit否,因为在此之前有一个“)”,所以不需要空格。@juharr噢,是的,您是对的。您应该签出并停止使用.AddWithValue()
-这可能会导致意外的结果…在此之后引发错误“System.Data.dll中发生'System.Data.SqlClient.SqlException'类型的异常,但未在用户代码中处理其他信息:关键字'Table'附近的语法不正确。”。“有什么想法吗?@RossLeech使用您表的实际名称…表名是table,可能是其他名称吗?@SiyualInto
关键字丢失了,所以我在中添加了该关键字。@RossLeech请不要将您的数据库对象命名为保留关键字。这不仅会像现在这样让人非常困惑,而且您可能会遇到一大堆问题。”rd—并且很难诊断—错误。请为表指定一个有意义的名称,该名称与它预期存储的数据相关。但是,如果您仍然决定使用表
作为表名,则需要明确使用以下符号:[table]
。这会将您的值标记为标识符,而不是关键字。