ADO.NET 数据库应用程序 运行 时间异常
ADO.NET database application run time Exception
请帮助理解这些异常告诉我的内容以及我如何解决它们?
我用 ADO.NET 创建了一个应用程序。项目调试器没有显示任何错误,但在 运行 期间我收到了这些异常。我想我在这个方法 'GetFullContactPersonTreeDB' 中的 'PersonkartotekDBUtil.cs 文件中写了一些代码行。
在这里,我要做的是通过 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)";
}
在 运行 运行程序后 window 控制台上的错误消息:
System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near
'.'. at System.Data.SqlClient.SqlConnection.OnError(SqlException
exception, Boolean breakConnection, Action1 wrapCloseInAction) at
System.Data.SqlClient.SqlInternalConnection.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.SqlClient.SqlCommand.ExecuteReader() at
Infrastructure.PersonkartotekDB.ADONET.PersonkartotekDBUtil.GetFullContactPersonTreeDB(Person&
fcpt) in
C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\Infrastructure\PersonkartotekDB.ADONET\PersonkartotekDBUtil.cs:line
382 ClientConnectionId:716d2899-cbbe-4aa6-89de-66452d907b66 Error
Number:102,State:1,Class:15
Unhandled Exception: System.Data.SqlClient.SqlException: Incorrect
syntax near '.'. at
System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
Boolean breakConnection, Action1 wrapCloseInAction) at
System.Data.SqlClient.SqlInternalConnection.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.SqlClient.SqlCommand.ExecuteReader() at
Infrastructure.PersonkartotekDB.ADONET.PersonkartotekDBUtil.GetFullContactPersonTreeDB(Person&
fcpt) in
C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\Infrastructure\PersonkartotekDB.ADONET\PersonkartotekDBUtil.cs:line
449 at ApplicationLogic.PersonkartotekApp.ProgramApp() in
C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\ApplicationLogic\PersonkartotekApp.cs:line
14 at ProgramApplication.Program.Main(String[] args) in
C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\ProgramApplication\Program.cs:line
10
附件显示了调试器上的异常。
您似乎遗漏了几个逗号,并且还遗漏了一个内连接。
通过 运行 您在 Sql server management studio(SSMS) 中的查询并使用解析 (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
请帮助理解这些异常告诉我的内容以及我如何解决它们?
我用 ADO.NET 创建了一个应用程序。项目调试器没有显示任何错误,但在 运行 期间我收到了这些异常。我想我在这个方法 'GetFullContactPersonTreeDB' 中的 'PersonkartotekDBUtil.cs 文件中写了一些代码行。 在这里,我要做的是通过 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)";
}
在 运行 运行程序后 window 控制台上的错误消息:
System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near '.'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.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.SqlClient.SqlCommand.ExecuteReader() at Infrastructure.PersonkartotekDB.ADONET.PersonkartotekDBUtil.GetFullContactPersonTreeDB(Person& fcpt) in C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\Infrastructure\PersonkartotekDB.ADONET\PersonkartotekDBUtil.cs:line 382 ClientConnectionId:716d2899-cbbe-4aa6-89de-66452d907b66 Error Number:102,State:1,Class:15Unhandled Exception: System.Data.SqlClient.SqlException: Incorrect syntax near '.'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.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.SqlClient.SqlCommand.ExecuteReader() at Infrastructure.PersonkartotekDB.ADONET.PersonkartotekDBUtil.GetFullContactPersonTreeDB(Person& fcpt) in C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\Infrastructure\PersonkartotekDB.ADONET\PersonkartotekDBUtil.cs:line 449 at ApplicationLogic.PersonkartotekApp.ProgramApp() in C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\ApplicationLogic\PersonkartotekApp.cs:line 14 at ProgramApplication.Program.Main(String[] args) in C:\Users\User\Desktop\E18I4DABHandIn2au2016082168\Personkartotek\ProgramApplication\Program.cs:line 10
附件显示了调试器上的异常。
您似乎遗漏了几个逗号,并且还遗漏了一个内连接。
通过 运行 您在 Sql server management studio(SSMS) 中的查询并使用解析 (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