2009-05-27 8 views
0

私は3つのテーブルを持っており、いくつかのrecoredを選択する必要があります それらの2つのテーブルで、私は同じ名前のfiledsを持っており、これらのフィールドでWhere Expressionを使用しようとするとエラーメッセージが表示されます: If私はこのエラーメッセージが示すTABLENAMe.Columns.COLNAMEを使用します:あいまいな列名 'FKLoginID'。 TableNAme.COLColumn.QualifiedNameを使用すると、作成されたパラメータ "@ [dbo]。[Tbl_PersonalInformation]。[FKLoginID] 0"のエラーが発生します。SubSonic Inner join問題を選択

これらのテーブルを照会する方法はありますか? おかげで、次の動作するはず

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

あなたの答えのおかげで、しかしヨールのコードで私は

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) .Where(TblPersonalInformation.FKLoginIDColumn)から.IsEqualTo (User.Identity.Name); しかし、私はまだオブジェクトのインスタンスに設定されていないオブジェクト参照を得ました。 – Ashian

+0

TblPersonalInformation.FKLoginIDColumnを使用しないで、TblPersonalInformation.Columns.FKLoginIDを使用します。 –

0

:あなたは.QualifiedNameを呼び出すと

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); 

には、あなたが誤っどこ(文字列のコ呼んでいますwhere(TableColumn列)の代わりにlumnName)を使用します。

これは、q.BuildSqlStatement()の値を確認することで確認できます。これはデバッグに非常に便利です。