捕获了 SqlException-> ')' 附近的语法不正确
本文关键字:语法 不正确 SqlException- | 更新日期: 2023-09-27 18:37:07
使用的平台:Visual Studio 2010 和 SQL Server 2008 R2
我不断收到一个空异常,显示"')'附近的语法不正确"。在下面突出显示的点,即在阅读器部分。在此之前,异常显示读取器已打开,因为我使用的是嵌套读取器,并且在连接字符串中使用"MultipleActiveResultSets=True"进行了解析。还附加了代码片段和错误日志。
任何人都可以帮助解决这个问题吗?
SqlCommand cmdDetails8 = new SqlCommand("SELECT * FROM [sub].[szn_TimeCard_Week] WHERE [szn_user_name] = @usrname AND [szn_start_date] = @strtdate) AND ([szn_thu] = 0)", conn);
cmdDetails8.Parameters.AddWithValue("@usrname", tymT.UserName);
cmdDetails8.Parameters.AddWithValue("@strtdate", strtDate);
using (SqlDataReader reader1 = cmdDetails8.ExecuteReader()) // null exception point
{
if (reader1.HasRows)
{
SqlCommand cmdDetails9 = new SqlCommand("UPDATE [sub].[szn_TimeCard_Week] SET [szn_thu] =
@hrs WHERE [szn_user_name] = @usrname AND [szn_start_date] =
@strtdate;", conn);
cmdDetails9.Parameters.AddWithValue("@usrname", tymT.UserName);
cmdDetails9.Parameters.AddWithValue("@strtdate", strtDate);
cmdDetails9.Parameters.AddWithValue("@hrs", dayTotalHrs);
}
else
{
SqlCommand cmdDetails9 = new SqlCommand("INSERT INTO [sub].[szn_TimeCard_Week]
([szn_user_name],[szn_start_date],[szn_thu]) VALUES (@usr_name,@strt_date,@hrs));",
conn);
cmdDetails9.Parameters.AddWithValue("@usr_name", tymT.UserName);
cmdDetails9.Parameters.AddWithValue("@strt_date", strtDate);
cmdDetails9.Parameters.AddWithValue("@hrs", dayTotalHrs);
}
reader1.Close();
}
你的第一个问题是,恰如其分地,在第一行:
SELECT * FROM [sub].[szn_TimeCard_Week]
WHERE [szn_user_name] = @usrname AND [szn_start_date] = @strtdate)
^
你没有左括号,这意味着右括号导致宇宙不平衡。
您的第二个问题位于else
块的第一行,该行有一个多余的右括号:
INSERT INTO [sub].[szn_TimeCard_Week]
([szn_user_name],[szn_start_date],[szn_thu])
VALUES
(@usr_name,@strt_date,@hrs))
^
最初,您应该更改此设置
"SELECT * FROM [sub].[szn_TimeCard_Week]
WHERE [szn_user_name] = @usrname AND [szn_start_date] = @strtdate) AND ([szn_thu] = 0)"
对此
"SELECT * FROM [sub].[szn_TimeCard_Week]
WHERE [szn_user_name] = @usrname AND [szn_start_date] = @strtdate AND ([szn_thu] = 0)"
您不需要strtdate
旁边的额外)
。
此外,您还应该更改此内容
VALUES (@usr_name,@strt_date,@hrs))
自
VALUES (@usr_name,@strt_date,@hrs)
你不需要那里的额外)
.这是一个语法错误。
这句话是最后的)
:
"INSERT INTO [sub].[szn_TimeCard_Week] ([szn_user_name],[szn_start_date],[szn_thu]) VALUES (@usr_name,@strt_date,@hrs));
^
第一个 sql 查询有错误写这个:
SELECT * FROM [sub].[szn_TimeCard_Week] WHERE [szn_user_name] = @usrname AND [szn_start_date] = @strtdate AND ([szn_thu] = 0);
最后写了这个:
INSERT INTO [sub].[szn_TimeCard_Week]
([szn_user_name],[szn_start_date],[szn_thu]) VALUES (@usr_name,@strt_date,@hrs);
代码中的此查询存在括号问题。在开始日期参数之后还有一个额外的关闭树皮。您需要根据需要通过应用括号来更正它。
SELECT * FROM [sub].[szn_TimeCard_Week] WHERE [szn_user_name] = @usrname AND [szn_start_date] = @strtdate) AND ([szn_thu] = 0)