SqlException被捕获 - > “#”;'附近的语法不正确。

时间:2015-01-12 08:18:46

标签: c# sql-server-2008-r2

使用的平台: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();
}

5 个答案:

答案 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)