我试图使用下面的代码在C#中的数据库中插入一个整数,但每次运行编译器都会通知我,我的整数不是有效列“无效的列名UserID”
有没有人对此有任何见解?谢谢。
Console.WriteLine("Please enter a new User Id");
string line = Console.ReadLine();
int UserID;
if (int.TryParse(line, out UserID))
{
Console.WriteLine(UserID);
Console.ReadLine();
}
//Prepare the command string
string insertString = @"INSERT INTO tb_User(ID,f_Name, l_Name) VALUES (UserID,'Ted','Turner')";
答案 0 :(得分:3)
首先,如果您不打算使用存储过程,我会养成使用参数化查询的习惯。在你的例子中,我会:
using (var command = new SqlCommand("INSERT INTO tb_User(ID, f_Name, l_Name) VALUES (@id, @forename, @surname)", conn))
{
command.Parameters.AddWithValue("id", id);
command.Parameters.AddWithValue("forename", forename);
command.Parameters.AddWithValue("surname", surname);
command.ExecuteNonQuery();
}
id
,forename
,surname
是适当的变量。注意我也在使用using
块,这可以确保我的对象在完成后被清理。
答案 1 :(得分:0)
这是因为你的insertString中的'UserID':...“VALUES(UserID”......无效。
您需要传递UserID的值,例如:...“VALUES('myUserIDGoesHere'”...
答案 2 :(得分:0)
您的字符串不会动态读取变量。使用这样的东西:
string insertString = string.Format(@“INSERT INTO tb_User(ID,f_Name,l_Name)VALUES ({0},'{1}','{2}')“,UserId,”Ted“, “特纳”);
根据您正在使用的数据访问类型,有更好的方法,但这只是为了纠正字符串。
答案 3 :(得分:0)
问题是VALUES
中的第一个参数 - 它根本没有定义。如果这是用户输入的值,则需要在命令中添加参数并在SQL中使用该参数;例如:
cmd.Parameters.AddWithValue("@id", UserID);
然后使用
VALUES(@id, ...
在TSQL中。
此外,通常您可能希望让系统生成唯一ID。这是一个最简单的级别,可以定义IDENTITY
(自动序列)。
答案 4 :(得分:0)
使用参数化查询:
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (var insertCommand = new SqlCommand(
@"INSERT INTO tb_User (ID, f_Name, l_Name)
VALUES (@ID, 'Ted', 'Turner')", connection))
{
insertCommand.Parameters.AddWithValue("@ID", userID);
insertCommand.ExecuteNonQuery();
}
}
答案 5 :(得分:-2)
要回答您的问题,请尝试:
string insertString = @"INSERT INTO tb_User(ID,f_Name, l_Name) VALUES ("
+ UserID + ",'Ted','Turner')";