2009-05-27 65 views
0

我有3個表,需要選擇一些recoreds, 在他們的2表中我有同名的fileds,並且當我嘗試使用Where表達式在這些提交我得到錯誤信息: 如果我使用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

謝謝您的回答,但尤爾的代碼,我得到這個錯誤消息

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

您是否嘗試過我張貼的查詢? – 2009-05-28 14:14:58

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()的值來驗證這一點。這對調試非常有用。