使用的平台:Visual Studio 2010和SQL Server 2008 R2
我一直收到一个空的异常,说“附近的语法不正确”)。“在下面突出显示的点,即读者部分。在此之前,异常表示Reader已经打开,因为我使用的是嵌套的Reader,并且在连接字符串中使用'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();
}
答案 0 :(得分:2)
第一个问题恰恰在第一行:
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))
^
答案 1 :(得分:1)
最初,你应该改变这个
"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)
你不需要额外的)
。这是语法错误。
答案 2 :(得分:0)
在此声明中是最后一个)
:
"INSERT INTO [sub].[szn_TimeCard_Week] ([szn_user_name],[szn_start_date],[szn_thu]) VALUES (@usr_name,@strt_date,@hrs));
^
答案 3 :(得分:0)
第一个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);
答案 4 :(得分:0)
代码中的此查询存在括号问题。在开始日期参数之后还有一个额外的关闭控制台。您需要根据需要应用括号来纠正错误。
SELECT * FROM [sub].[szn_TimeCard_Week] WHERE [szn_user_name] = @usrname AND [szn_start_date] = @strtdate) AND ([szn_thu] = 0)