当我尝试执行以下命令时,我收到以下输出错误。
("INSERT INTO Leaves (EmpID,TotalLeavesRemaining,Year)
SELECT EmpID,TotalLeavesRemaining,'" + year + "'
FROM Leaves
WHERE Year = '" + yearbefore + "' ", con)
其他信息:从字符串转换
INSERT INTO Leaves(EmpID,TotalL"键入' Double'无效。
当我通过sql management studio运行命令directry时,查询完成了它的工作!
答案 0 :(得分:0)
如果您在年份数字周围加上单引号,则会将其设为字符串。但显然你的年份列是double类型。 (为什么?不应该是'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);
...
}
请注意,即使对于字符串参数,也不需要任何参数引号。它们使您免于转义字符串,格式化数字和日期。
如果要使用多行字符串,请使用随@
引入的逐字字符串。这些字符串文字可以跨越多行,并且不会将反斜杠(\
)解释为转义字符。单引号可以用双引号转义。
答案 1 :(得分:0)
如果您确实需要连接SQL字符串,请使用&
代替+
将您的年份转换为字符串或联接
("INSERT INTO Leaves (EmpID,TotalLeavesRemaining,Year)
SELECT EmpID,TotalLeavesRemaining,'" + year.ToString + "'
FROM Leaves
WHERE Year = '" + yearbefore.ToString + "' ", con)