执行sql语句时出错
问题描述:
当我尝试执行以下命令时,出现以下输出错误。执行sql语句时出错
("INSERT INTO Leaves (EmpID,TotalLeavesRemaining,Year)
SELECT EmpID,TotalLeavesRemaining,'" + year + "'
FROM Leaves
WHERE Year = '" + yearbefore + "' ", con)
其他信息:从字符串转换
INSERT INTO叶(的EmpID,TotalL”键入 '双' 无效
当我通过运行该命令直供。 sql管理工作室查询完成它的工作!
答
如果你把单引号放在你的年份数字中,它会使它成为一个字符串,但显然你的年份列i s型双。 (为什么?不应该是int类型的)。删除单引号!
并且还使用命令参数。这使得它更安全,不易出错并且更快,因为SQL-Server可以缓存查询并重用它,而无需重新编译并再次创建执行计划。
using (var cmd new SqlCommand(@"INSERT INTO Leaves (EmpID, TotalLeavesRemaining, Year)
SELECT EmpID,TotalLeavesRemaining, @year
FROM Leaves
WHERE Year = @yearbefore", con)) {
cmd.Parameters.AddWithValue("@year", 2015);
cmd.Parameters.AddWithValue("@yearbefore", 2014);
...
}
请注意,即使对于字符串参数,您也不需要引用任何引号。他们免费逃离字符串,格式化数字和日期。
如果要使用多行字符串,请使用与@
一起引入的逐字字符串。这些字符串文字可以跨越多行,并且不会将反斜杠(\
)解释为转义字符。单引号可以通过双引号转义。
答
如果你真的需要连接SQL字符串,然后你的年转换为字符串或使用&
代替+
("INSERT INTO Leaves (EmpID,TotalLeavesRemaining,Year)
SELECT EmpID,TotalLeavesRemaining,'" + year.ToString + "'
FROM Leaves
WHERE Year = '" + yearbefore.ToString + "' ", con)
标签你与你所使用的数据库问题加入。 –
你需要使用不连接sql字符串的参数 - 可以让你打开sql注入攻击,并且会为你评估数据类型。 – OneFineDay
Year的数据类型是什么,当你试图像字符串一样处理时,它是双倍的吗? –