捕获了 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();
}

捕获了 SqlException-> ')' 附近的语法不正确

你的第一个问题是,恰如其分地,在第一行:

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)