【问题标题】:ADO.NET database application run time ExceptionADO.NET 数据库应用程序运行时异常
【发布时间】: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,Action1 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, Action1 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


【解决方案1】:

看起来您缺少几个逗号,还缺少一个内部联接。

通过在 Sql server management studio(SSMS) 中运行查询并使用 parse(CTRL+F5) 可以突出显示问题。

请参阅下面的固定代码。 将来,值得拥有一致的格式以使您的生活更轻松。

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
        INNER JOIN AlternativeAddress ON Person.PersonID = AlternativeAddress.Person
        INNER JOIN   Address ON Person.PersonID = Address.Person
        WHERE   Person.PersonID = @PersonId

【讨论】:

  • 非常感谢 :) 它有帮助。
猜你喜欢
  • 2018-09-23
  • 2021-08-28
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多