2009-05-27 3 views
0

나는 3 개의 테이블을 가지고 있으며 어떤 recoreds를 선택해야합니까? 그 중 2 개의 테이블에서 동일한 이름의 fileds를 가지고 있는데 Where Where Expression을 사용하려고하면 오류 메시지가 나타납니다 : If 나는 TABLENAMe.Columns.COLNAME이 오류 메시지를 보여줍니다 : 모호한 열 이름 'FKLoginID'를 사용합니다. TableNAme.COLColumn.QualifiedName을 사용하는 경우 "@ [dbo]. [Tbl_PersonalInformation]. [FKLoginID] 0"근처에 오류가 있습니다.SubSonic 내부 조인 문제 선택

어떻게 이러한 테이블을 쿼리 할 수 ​​있습니까? 감사

SqlQuery q = new Select().From(Tables.TblStockbrokerBroadDirector) 
       .InnerJoin(TblPersonalInformation.PersonalInfoIDColumn, TblStockbrokerBroadDirector.FKPersonalInfoIDColumn) 
       .InnerJoin(TblCompanyInformation.BizInfoIDColumn, TblStockbrokerBroadDirector.FKBizInfoIDColumn) 
       .Where(TblPersonalInformation.FKLoginIDColumn.QualifiedName).IsEqualTo(User.Identity.Name); 

CREATE TABLE [dbo].[Tbl_CompanyInformation](
    [Code] [bigint] IDENTITY(111111111,1) NOT NULL, 
    [BizInfoID] [nvarchar](20) NOT NULL, 
    [BizName] [nvarchar](50) NOT NULL, 
    [RegisterationNO] [nvarchar](50) NOT NULL, 
    [RegisterationPlace] [bigint] NOT NULL, 
    [TypeBiz] [nvarchar](50) NOT NULL, 
    [DirectManagerCode] [nvarchar](20) NOT NULL, 
    [FKAddressID] [nvarchar](20) NOT NULL, 
    [FKLoginID] [nvarchar](20) NOT NULL, 
    [SabtDate] [nvarchar](50) NOT NULL, 
    [NewName] [nvarchar](50) NULL, 
    [OldName] [nvarchar](50) NULL, 
    [DateTasisAgahi] [nvarchar](50) NOT NULL, 
    [NOTasisAgahi] [nvarchar](20) NOT NULL, 
    [NOAsasname] [nvarchar](20) NOT NULL, 
    [FKStatus] [smallint] NOT NULL CONSTRAINT [DF_Tbl_CompanyInformation_FKStatus] DEFAULT ((0)), 
CONSTRAINT [PK_Tbl_CompanyInformation_1] PRIMARY KEY CLUSTERED 
(
    [Code] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY], 
CONSTRAINT [IX_Tbl_Biz] UNIQUE NONCLUSTERED 
(
    [BizInfoID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY], 
CONSTRAINT [IX_Tbl_CompanyRegNoP] UNIQUE NONCLUSTERED 
(
    [RegisterationNO] ASC, 
    [RegisterationPlace] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Tbl_PersonalInformation](
    [Code] [bigint] IDENTITY(111111111,1) NOT NULL, 
    [PersonalInfoID] [nvarchar](20) NOT NULL, 
    [FKLoginID] [nvarchar](20) NULL, 
    [FirstName] [nvarchar](50) NOT NULL, 
    [LastName] [nvarchar](150) NOT NULL, 
    [SSN] [nvarchar](10) NOT NULL, 
    [NationalCode] [nvarchar](10) NOT NULL, 
    [CopyNCard] [image] NULL, 
    [Birthyear] [nvarchar](50) NOT NULL, 
    [Birthplace] [bigint] NOT NULL, 
    [FKProvince] [smallint] NOT NULL, 
    [FKAddressID] [nvarchar](20) NOT NULL, 
    [Phone] [nvarchar](50) NULL, 
    [Sex] [bit] NOT NULL CONSTRAINT [DF_Tbl_PersonalInformation_Sex] DEFAULT ((0)), 
    [FKStatus] [smallint] NULL CONSTRAINT [DF_Tbl_PersonalInformation_FKStatus] DEFAULT ((0)), 
CONSTRAINT [PK_Tbl_PersonalInformation_1] PRIMARY KEY CLUSTERED 
(
    [Code] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY], 
CONSTRAINT [IX_Tbl_PersonalInformation] UNIQUE NONCLUSTERED 
(
    [PersonalInfoID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 


CREATE TABLE [dbo].[Tbl_Stockbroker_BroadDirector](
    [Code] [bigint] IDENTITY(111111111,1) NOT NULL, 
    [StockbrokerCode] [nvarchar](20) NOT NULL, 
    [FKBizInfoID] [nvarchar](20) NOT NULL, 
    [FKPersonalInfoID] [nvarchar](20) NULL, 
    [IsStockbroker] [bit] NOT NULL CONSTRAINT [DF_Tbl_Stockbroker_BroadDirector_IsStockbroker] DEFAULT ((0)), 
    [IsBoardDirector] [bit] NOT NULL CONSTRAINT [DF_Tbl_Stockbroker_BroadDirector_IsBoardDirector] DEFAULT ((0)), 
    [FKStatus] [smallint] NULL CONSTRAINT [DF_Tbl_Stockbroker_BroadDirector_status] DEFAULT ((0)), 
    [StockPercent] [float] NULL CONSTRAINT [DF_Tbl_Stockbroker_BroadDirector_StockPercent] DEFAULT ((0)), 
    [SahamdarHoghoghi] [bit] NULL, 
    [FkBizinfoIDSahamdar] [nvarchar](20) NULL, 
CONSTRAINT [PK_Tbl_Stockbroker_BroadDirector] PRIMARY KEY CLUSTERED 
(
    [Code] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY], 
CONSTRAINT [IX_Tbl_Stockbroker_Code] UNIQUE NONCLUSTERED 
(
    [StockbrokerCode] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

답변

0

귀하의 답변을 주셔서 감사합니다,하지만을 yor 코드에 의해 나는

Object reference not set to an instance of an object. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. 

Source Error: 


Line 33:    .InnerJoin(TblCompanyInformation.BizInfoIDColumn, TblStockbrokerBroadDirector.FKBizInfoIDColumn) 
Line 34:    .Where(TblPersonalInformation.FKLoginIDColumn).IsEqualTo(User.Identity.Name); 
Line 35:   Response.Write(q.BuildSqlStatement()); 
Line 36:    q.ExecuteDataSet(); 
Line 37:   } 


Source File: E:\MehdiBackup\Visual Studio 2008\Projects\EXtjsUI\EXtjsUI\testi\default.aspx.cs Line: 35 

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.] 
    SubSonic.ANSISqlGenerator.BuildConstraintSQL(String& constraintOperator, StringBuilder sb, Boolean isFirst, Boolean& expressionIsOpen, Constraint c) +129 
    SubSonic.ANSISqlGenerator.GenerateWhere() +218 
    SubSonic.ANSISqlGenerator.BuildSelectStatement() +124 
    SubSonic.SqlQuery.BuildSqlStatement() +71 
    IMPermit.testi._default.Page_Load(Object sender, EventArgs e) in E:\MehdiBackup\Visual Studio 2008\Projects\EXtjsUI\EXtjsUI\testi\default.aspx.cs:35 
    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33 
    System.Web.UI.Control.OnLoad(EventArgs e) +99 
    System.Web.UI.Control.LoadRecursive() +47 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436 
+0

당신은 내가 게시 된 쿼리를 시도이 오류 메시지가 있어요? –

+0

아담, 당신의 쿼리를 확인, 은 SQLQuery 쿼리 = DB.Select(). (Tables.TblStockbrokerBroadDirector) .InnerJoin (Tables.TblPersonalInformation) .InnerJoin (Tables.TblCompanyInformation) 어디에요 (TblPersonalInformation.FKLoginIDColumn)에서 .IsEqualTo (User.Identity.Name); 하지만 여전히 개체 참조가 개체의 인스턴스로 설정되어 있지 않습니다. – Ashian

+0

TblPersonalInformation.FKLoginIDColumn을 사용하지 말고 TblPersonalInformation.Columns.FKLoginID를 사용하십시오. –

0

다음은 작동합니다 :

SqlQuery query = DB.Select().From(Tables.TblStockbrokerBroadDirector) 
    .InnerJoin(TblPersonalInformation) 
    .InnerJoin(TblCompanyInformation) 
    .Where(TblPersonalInformation.Columns.FKLoginIDColumn).IsEqualTo(User.Identity.Name); 
0

변경

.Where(TblPersonalInformation.FKLoginIDColumn.QualifiedName).IsEqualTo(User.Identity.Name); 

당신이 전화

.Where(TblPersonalInformation.FKLoginIDColumn).IsEqualTo(User.Identity.Name); 

로는 .QualifiedName 당신은 실수로 어디 (문자열 협력을 요구하고있다 lumnName) 대신 Where (TableColumn 열).

q.BuildSqlStatement()의 값을 확인하여이를 확인할 수 있습니다. 이것은 디버깅에 매우 유용합니다.