【发布时间】:2018-10-08 17:35:49
【问题描述】:
请帮助理解这些异常告诉我什么以及如何解决它们?
我使用 ADO.NET 创建了一个应用程序。但是,项目调试器没有显示任何错误,但在运行时我收到了这些异常。我想我弄乱了我在“PersonkartotekDBUtil.cs 文件”中编写的一些代码行,在这个方法“GetFullContactPersonTreeDB”中。 在这里,我要做的是通过 JOIN 原则显示完整的人员概述信息以及人员目录的连接属性。
谁能纠正我?
我怀疑不起作用的方法是:
public void GetFullContactPersonTreeDB(ref Person fcpt)
{
string fullPersonkartotek = @"SELECT Person.PersonId, Person.FirstName, Person.MiddleName, Person.LastName, Person.Email, Person.Notes, Person.PrimaryAddress, Person.AlternativeAddresses, Person.TelefonNumbers
Address.AddressID, Address.StreetName, Address.HouseNumber, Address.PostNr, Address.PersonPrimary, Person.AlternativePerson
PostNr.PostNrID, PostNr.PostNumber, PostNr._Country, PostNr._City
City.CityID, City.CityName,
Country.CountryID, Country.CountryCode, Country.CountryName,
Telefon.TelefonID, Telefon.Number, Telefon.TelefonType, Telefon.TelefonProvider,
Provider.ProviderID, Provider.ProviderName
FROM Person INNER JOIN
Address ON Person.PersonId = Address.Person INNER JOIN
Telefon ON Person.PersonID = Telefon.Person
AlternativeAddress ON Person.PersonID = AlternativeAddress.Person
Address ON Person.PersonID = Address.Person
WHERE (Person.PersonID = @PersonId)";
}
运行程序后控制台窗口的错误信息:
System.Data.SqlClient.SqlException (0x80131904):附近的语法不正确 '.'。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection,Action
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler、SqlDataReader 数据流、 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, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior runBehavior、布尔 returnStream、布尔 异步,Int32 超时,任务和任务,布尔 asyncWrite,布尔 inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法,TaskCompletionSource`1 完成,Int32 超时,Task& 任务, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader() 在 Infrastructure.PersonkartotekDB.ADONET.PersonkartotekDBUtil.GetFullContactPersonTreeDB(Person& fcpt) 在 C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\Infrastructure\PersonkartotekDB.ADONET\PersonkartotekDBUtil.cs:line 382 ClientConnectionId:716d2899-cbbe-4aa6-89de-66452d907b66 错误 编号:102,状态:1,等级:15未处理的异常:System.Data.SqlClient.SqlException:不正确 '.' 附近的语法。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, Boolean breakConnection, Action
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler、SqlDataReader 数据流、 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, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior runBehavior、布尔 returnStream、布尔 异步,Int32 超时,任务和任务,布尔 asyncWrite,布尔 inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法,TaskCompletionSource`1 完成,Int32 超时,Task& 任务, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader() 在 Infrastructure.PersonkartotekDB.ADONET.PersonkartotekDBUtil.GetFullContactPersonTreeDB(Person& fcpt) 在 C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\Infrastructure\PersonkartotekDB.ADONET\PersonkartotekDBUtil.cs:line 449 在 ApplicationLogic.PersonkartotekApp.ProgramApp() 中 C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\ApplicationLogic\PersonkartotekApp.cs:line 14 在 ProgramApplication.Program.Main(String[] args) 中 C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\ProgramApplication\Program.cs:line 10
【问题讨论】:
-
请不要指望我们去github上挖代码。在问题正文中发布相关代码。
-
谢谢。我已经用相关代码更新了问题。
-
您的选择语句中是否缺少一些逗号?就在“Person.TelefonNumbers”、“Person.AlternativePerson”和“PostNr._City”之后?
-
那里可能有双逗号
-
将查询复制到 SSMS。制动选择中的列列表,以便每列位于不同的行中。如果您看到可疑的东西,请目视检查。如果没有,请声明
@PersonId变量并尝试直接在 SSMS 上运行它。如果您收到错误消息,请双击它。这应该将插入符号大致移动到问题所在的位置。
标签: c# ado.net sqlconnection sqlcommand