SqlDataException:'=' 附近的语法不正确

Posted

技术标签:

【中文标题】SqlDataException:\'=\' 附近的语法不正确【英文标题】:SqlDataException: Incorrect Syntax near '='SqlDataException:'=' 附近的语法不正确 【发布时间】:2019-10-01 00:51:15 【问题描述】:

我正在尝试从数据库中获取数据,但出现此错误。我确信我错过了一些简单的逻辑,但我无法弄清楚查询有什么问题,因为它直接在 DB 上运行良好。

SqlCommand retrievedgeids = new SqlCommand("Select edgeid from Edges where fromIntersection = @fromid and toIntersection = @toid", sqlconnection);

retrievedgeids.Parameters.AddWithValue("@fromid", fromid);
retrievedgeids.Parameters.AddWithValue("@toid", toid);

using (SqlDataReader reader = retrievedgeids.ExecuteReader())

    while (reader.Read())
    
         if (reader["edgeid"] != System.DBNull.Value)
         
              edgeids.Add(Convert.ToInt32(reader["edgeid"]));
         
    

这是错误信息:

System.Data.SqlClient.SqlException (0x80131904):'=' 附近的语法不正确。

在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔调用者HasConnectionLock,布尔异步关闭) 在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean & dataReady) 在 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() 在 System.Data.SqlClient.SqlDataReader.get_MetaData() 在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,字符串 resetOptionsString,布尔 isInternal,布尔 forDescribeParameterEncryption,布尔 shouldCacheForAlwaysEncrypted) 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,布尔异步,Int32 超时,任务和任务,布尔异步写入,布尔 inRetry,SqlDataReader ds,布尔 describeParameterEncryptionRequest) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String 方法,TaskCompletionSource`1 完成,Int32 超时,Task& 任务,Boolean& usedCache,Boolean asyncWrite,Boolean inRetry) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,String 方法) 在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法) 在 System.Data.SqlClient.SqlCommand.ExecuteReader() 在 C:\Users\ssindhu\source\repos\NewRNG\NewRNG\UpdatedRNG.cs:line 148 中的 NewRNG.UpdatedRNG.getalledges() ClientConnectionId:36446293-901d-49a3-85a7-da73e2acaedd 错误号:102,状态:1,类:15

你能帮我解决这个问题吗?

【问题讨论】:

使用“sql server profiler”,检查已经发送到SQL Server的查询 由于堆栈跟踪的第一行提到了连接,您确定连接字符串正常吗?其他连接是否已经工作? 【参考方案1】:

这里是您正在使用的 Parameter 类的 Microsoft 文档的链接: https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlparameter?view=dotnet-plat-ext-5.0

你需要把你的代码改成这样:

System.Data.SqlClient.SqlCommand retrievedgeids = new System.Data.SqlClient.SqlCommand("Select edgeid from Edges where fromIntersection =     @fromid and toIntersection = @toid", sqlconnection);
System.Data.SqlClient.SqlParameter fromIdParameter = new System.Data.SqlClient.SqlParameter("fromid", SqlDbType.Int);
fromIdParameter.Value = fromId;
retrievedgeids.Parameters.Add(fromIdParameter);

【讨论】:

【参考方案2】:

像这样使用Parameters.Add 而不是AddWithValue

retrievedgeids.Parameters.Add("@fromid", SqlDbType.Int);
retrievedgeids.Parameters["@fromid"].Value = fromid; 

【讨论】:

以上是关于SqlDataException:'=' 附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB教程案例41语音信号的语谱图matlab仿真与应用分析

重要的事情没有头绪。 你必须用开发者的语

声网 X Yalla:面对面不如线上见,中东年轻人最偏爱的语聊房是怎样“炼”成的?

Python语音分析从绘制好看的波形图和语谱图开始

在java中接受日期类型命令行参数

浅谈栈