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, Action
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 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仿真与应用分析