我正在尝试创建一个在DataGrid中显示某些信息的报告,但我遇到了SQL方法的问题。我正在显示的字段来自所有不同的表格。当我在MySqlWorkbench中运行查询时,它可以工作,但是当我尝试在visual studio中运行程序时,我收到错误。
private static string SearchSQL
{
get
{
return @" SELECT fleetchecklist.*,
cl.ChecklistNo As CheckListNo,
v.VehicleOwnerID AS VehicleOwnerID,
v.VehicleOwner AS VehicleOwnerName,
v.Reg As VehicleReg,
t.TrailerOwnerID AS TrailerOwnerID,
t.TrailerOwner AS TrailerOwnerName,
t.Reg As TrailerReg,
vdlc.Description AS VehicleDriverLicenseClassName,
tdlc.Description AS TrailerDriverLicenseClassName,
m1.MaintenanceNo AS MaintenanceNo,
m1.Date AS Date
FROM fleetchecklist
LEFT JOIN maintenance m1 ON m1.LinkedID
LEFT JOIN Vehicle v ON m1.LinkedID = v.ID
LEFT JOIN Trailer t ON m1.LinkedID = t.ID
left join Employee ve ON v.VehicleOwnerID = ve.ID
LEFT JOIN Employee te ON t.TrailerOwnerID = te.ID
LEFT JOIN driverlicenseclass vdlc ON ve.DriverLicenseClassID = vdlc.ID
LEFT JOIN driverlicenseclass tdlc ON te.DriverLicenseClassID = tdlc.ID
LEFT JOIN GeneralSmall gs ON m1.TypeID = gs.ID
LEFT JOIN fleetchecklist cl ON m1.ChecklistID = cl.ID
WHERE m1.Company_ID = ?compid ";
}
}
我收到错误:
列' CheckListID'不属于桌子。
当我尝试将CheckListID的代码m1.ChecklistID As CheckListID,
添加到SQL中时,我得到错误:
无法将对象从DBNull强制转换为其他类型。
在CheckListID行上的此方法中发生错误:
protected override void FillObject(DataRow dr)
{
ID = Convert.ToInt32(dr["ID"]);
CheckListID = Convert.ToInt32(dr["CheckListID"]);
LinkedItemID = Convert.ToInt32(dr["LinkedItemID"]);
ItemTitle = Convert.ToString(dr["ItemTitle"]);
Checked = Convert.ToBoolean(dr["Checked"]);
Defect = Convert.ToBoolean(dr["Defect"]);
Resolved = Convert.ToBoolean(dr["Resolved"]);
ResolvedDate = dr["ResolvedDate"].DateTimeOrNull();
ResolvedBy = dr["ResolvedBy"].IntOrNull();
if(dr["Comment"] != DBNull.Value)
Comment = Convert.ToString(dr["Comment"]);
if (dr["ResolvedComment"] != DBNull.Value)
ResolvedComment = Convert.ToString(dr["ResolvedComment"]);
}
答案 0 :(得分:0)
您正在从fleetchecklist
中进行选择,然后在最后再次加入。 LEFT JOIN maintenance m1 ON m1.LinkedID
也没有加入任何内容。
SELECT fleetchecklist.*,
cl.ChecklistNo As CheckListNo,
v.VehicleOwnerID AS VehicleOwnerID, v.VehicleOwner AS VehicleOwnerName, v.Reg As VehicleReg,
t.TrailerOwnerID AS TrailerOwnerID, t.TrailerOwner AS TrailerOwnerName, t.Reg As TrailerReg,
vdlc.Description AS VehicleDriverLicenseClassName,
tdlc.Description AS TrailerDriverLicenseClassName,
m1.MaintenanceNo AS MaintenanceNo, m1.Date AS Date
FROM fleetchecklist cl
LEFT JOIN maintenance m1 ON cl.ID = m1.ChecklistID
LEFT JOIN Vehicle v ON m1.LinkedID = v.ID
LEFT JOIN Trailer t ON m1.LinkedID = t.ID
LEFT JOIN Employee ve ON v.VehicleOwnerID = ve.ID
LEFT JOIN Employee te ON t.TrailerOwnerID = te.ID
LEFT JOIN driverlicenseclass vdlc ON ve.DriverLicenseClassID = vdlc.ID
LEFT JOIN driverlicenseclass tdlc ON te.DriverLicenseClassID = tdlc.ID
LEFT JOIN GeneralSmall gs ON m1.TypeID = gs.ID
WHERE m1.Company_ID = ?compid
也没有毫无意义的别名
SELECT fleetchecklist.*,
cl.ChecklistNo,
v.VehicleOwnerID, v.VehicleOwner AS VehicleOwnerName, v.Reg As VehicleReg,
t.TrailerOwnerID, t.TrailerOwner AS TrailerOwnerName, t.Reg As TrailerReg,
vdlc.Description AS VehicleDriverLicenseClassName,
tdlc.Description AS TrailerDriverLicenseClassName,
m1.MaintenanceNo, m1.Date
FROM fleetchecklist cl
LEFT JOIN maintenance m1 ON cl.ID = m1.ChecklistID
LEFT JOIN Vehicle v ON m1.LinkedID = v.ID
LEFT JOIN Trailer t ON m1.LinkedID = t.ID
LEFT JOIN Employee ve ON v.VehicleOwnerID = ve.ID
LEFT JOIN Employee te ON t.TrailerOwnerID = te.ID
LEFT JOIN driverlicenseclass vdlc ON ve.DriverLicenseClassID = vdlc.ID
LEFT JOIN driverlicenseclass tdlc ON te.DriverLicenseClassID = tdlc.ID
LEFT JOIN GeneralSmall gs ON m1.TypeID = gs.ID
WHERE m1.Company_ID = ?compid