将字符串传递给 DocumentHelper.GetDocuments().Where() 时出现异常
Exception while passing string to DocumentHelper.GetDocuments().Where()
我正在尝试获取这样的节点:
DocumentHelper.GetDocuments()
.Where("NodeParentID == 25 && NodeLevel == 2")
但出现异常:
Incorrect syntax near '='. at
System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
Boolean breakConnection, Action1 wrapCloseInAction) at
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,
SqlCommand cmdHandler, SqlDataReader dataStream,
BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject
stateObj, Boolean& dataReady) at
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() at
System.Data.SqlClient.SqlDataReader.get_MetaData() at
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,
RunBehavior runBehavior, String resetOptionsString, Boolean
isInternal, Boolean forDescribeParameterEncryption, Boolean
shouldCacheForAlwaysEncrypted) at
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean
async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry,
SqlDataReader ds, Boolean describeParameterEncryptionRequest) at
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String
method, TaskCompletionSource
1 completion, Int32 timeout, Task& task,
Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) at
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String
method) at
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior
behavior, String method) at
System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset,
DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String
srcTable, IDbCommand command, CommandBehavior behavior) at
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32
startRecord, Int32 maxRecords, String srcTable, IDbCommand command,
CommandBehavior behavior) at
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) at
CMS.DataEngine.AbstractDataConnection.ExecuteQuery(String queryText,
QueryDataParameters queryParams, QueryTypeEnum queryType, Boolean
requiresTransaction) --- End of inner exception stack trace ---
at CMS.DataEngine.AbstractDataConnection.HandleError(String queryText,
Exception ex) at
CMS.DataEngine.AbstractDataConnection.ExecuteQuery(String queryText,
QueryDataParameters queryParams, QueryTypeEnum queryType, Boolean
requiresTransaction) at
CMS.DataEngine.GeneralConnection.RunQuery(QueryParameters query) at
CMS.DataEngine.GeneralConnection.RunQueryWithRetry(QueryParameters
query, Int32 retryCount) at
CMS.DataEngine.GeneralConnection.ExecuteQuery(QueryParameters query,
Int32& totalRecords) at
CMS.DataEngine.DataQueryBase1.GetDataFromDBInternal() at
CMS.DataEngine.DataQueryBase
1.GetDataFromDB() at
CMS.DataEngine.DataQueryBase1.GetData() at
CMS.DataEngine.DataQueryBase
1.get_Result() at
CMS.DataEngine.DataQueryBase1.GetResults(IDataQuery query, Int32&
totalRecords) at CMS.DataEngine.DataQueryBase
1.GetDataFromDB()
at
CMS.DocumentEngine.DocumentQueryProperties.GetDataInternal(IDocumentQuery
query, Func1 baseGetDataMethod, Action
1 setTotalRecords) at
CMS.DataEngine.DataQueryBase1.GetData() at
CMS.DataEngine.DataQueryBase
1.get_Result() at
CMS.DataEngine.MultiObjectQueryBase3.EnsureTypedResult() at
CMS.DataEngine.MultiObjectQueryBase
3.GetEnumerator() at
System.Collections.Generic.List1..ctor(IEnumerable
1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
我做错了什么?
== 是一种 C# 语法,SQL 只使用一个 =.
你应该像这样做你的 where 条件:
.Where("NodeParentID", QueryOperator.Equals, 25)
.Where("NodeLevel ", QueryOperator.Equals, 7);
您的 SQL 语法在您的 "WHERE" 子句中不正确。您正在尝试在需要使用 T-SQL
的地方使用 C# 语法
不正确:
DocumentHelper.GetDocuments().Where("NodeParentID == 25 && NodeLevel == 2");
正确:
DocumentHelper.GetDocuments().Where("NodeParentID = 25 AND NodeLevel = 2");
我正在尝试获取这样的节点:
DocumentHelper.GetDocuments()
.Where("NodeParentID == 25 && NodeLevel == 2")
但出现异常:
Incorrect syntax near '='. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource
1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) at CMS.DataEngine.AbstractDataConnection.ExecuteQuery(String queryText, QueryDataParameters queryParams, QueryTypeEnum queryType, Boolean requiresTransaction) --- End of inner exception stack trace ---
at CMS.DataEngine.AbstractDataConnection.HandleError(String queryText, Exception ex) at CMS.DataEngine.AbstractDataConnection.ExecuteQuery(String queryText, QueryDataParameters queryParams, QueryTypeEnum queryType, Boolean requiresTransaction) at CMS.DataEngine.GeneralConnection.RunQuery(QueryParameters query) at CMS.DataEngine.GeneralConnection.RunQueryWithRetry(QueryParameters query, Int32 retryCount) at CMS.DataEngine.GeneralConnection.ExecuteQuery(QueryParameters query, Int32& totalRecords) at CMS.DataEngine.DataQueryBase1.GetDataFromDBInternal() at CMS.DataEngine.DataQueryBase
1.GetDataFromDB() at CMS.DataEngine.DataQueryBase1.GetData() at CMS.DataEngine.DataQueryBase
1.get_Result() at CMS.DataEngine.DataQueryBase1.GetResults(IDataQuery query, Int32& totalRecords) at CMS.DataEngine.DataQueryBase
1.GetDataFromDB()
at CMS.DocumentEngine.DocumentQueryProperties.GetDataInternal(IDocumentQuery query, Func1 baseGetDataMethod, Action
1 setTotalRecords) at CMS.DataEngine.DataQueryBase1.GetData() at CMS.DataEngine.DataQueryBase
1.get_Result() at CMS.DataEngine.MultiObjectQueryBase3.EnsureTypedResult() at CMS.DataEngine.MultiObjectQueryBase
3.GetEnumerator() at System.Collections.Generic.List1..ctor(IEnumerable
1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
我做错了什么?
== 是一种 C# 语法,SQL 只使用一个 =.
你应该像这样做你的 where 条件:
.Where("NodeParentID", QueryOperator.Equals, 25)
.Where("NodeLevel ", QueryOperator.Equals, 7);
您的 SQL 语法在您的 "WHERE" 子句中不正确。您正在尝试在需要使用 T-SQL
的地方使用 C# 语法不正确:
DocumentHelper.GetDocuments().Where("NodeParentID == 25 && NodeLevel == 2");
正确:
DocumentHelper.GetDocuments().Where("NodeParentID = 25 AND NodeLevel = 2");