C# 使用SqlParameter从2个表中获取数据
我试图使用Join和C# 使用SqlParameter从2个表中获取数据,c#,sql-server,asp.net-mvc,stored-procedures,C#,Sql Server,Asp.net Mvc,Stored Procedures,我试图使用Join和SqlParameter从2个表中获取数据,但我在第二个表中得到空值。我正在使用ASP.NETMVC 以下是我的模型、控制器和视图: 型号: public class PersonalDetails { public int ID { get; set; } public string Name { get; set; } public string FatherName { get; set; } public string Dob { ge
SqlParameter
从2个表中获取数据,但我在第二个表中得到空值。我正在使用ASP.NETMVC
以下是我的模型、控制器和视图:
型号:
public class PersonalDetails
{
public int ID { get; set; }
public string Name { get; set; }
public string FatherName { get; set; }
public string Dob { get; set; }
public string State { get; set; }
public int StateId{ get; set; }
public string City { get; set; }
public int CitytId { get; set; }
public string EmailId { get; set; }
public List<Qualifications> Qualifications { get; set; }
}
public class Qualifications
{
public string className { get; set; }
// public int BoardId { get; set; }
public string Board { get; set; }
public double ObtainMarks { get; set; }
public double MaxMarks { get; set; }
public int Year { get; set; }
}
看法
现在,当我运行这段代码时,我有个人详细信息的值,但我无法获取鉴定部分的数据,它抛出了一个null异常,因为在这段代码中没有获取值。我做错了什么?存储的过程只返回一个平面结果集,该结果集将填充类的主要属性。它不能像您的
列表那样自动填充子列表。事实上,您的查询可能会为同一个人返回多行,这是因为连接,例如,如果此人具有多个与其关联的资格
要填充列表
,您需要运行一个单独的查询(如果愿意,在同一个存储过程中)并获得一个单独的结果集 旁注:存储过程不应使用sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp.
并使用其他东西作为前缀,或者根本不使用前缀@谢谢你给我的宝贵建议,我下次会记住的。:)将查询中资格部分的联接替换为“左联接”。并把资格部分放在最后join@NaveenChandraTiwari这毫无意义。如果内部联接限制了结果,那么将不会返回任何行,而不仅仅是在某些字段中丢失数据。左联接使限定条件中更有可能出现空列(如果有的话)。@A请确认您不清楚如何在PersonalDetails类中填充列表
?存储的proc只返回一个平面结果集,该结果集将填充类的主要属性。它不能像那样自动填充子列表。事实上,您的查询可能会为同一个人返回多行,这是因为连接,例如,如果此人具有多个与其关联的资格。要填充列表
,您需要运行一个单独的查询(如果愿意,在同一个存储过程中)并获得一个单独的结果集。
public List<PersonalDetails> showAll(int id)
{
List<PersonalDetails> psd = new List<PersonalDetails>();
SqlParameter[] para = new SqlParameter[]
{
new SqlParameter{ParameterName = "@ID",Value = id}
};
string query = @"sp_show_alldetails @ID";
psd = this.Database.SqlQuery<PersonalDetails>(query, para).ToList();
return psd;
}
public ActionResult ShowAllDetails(int id)
{
return View(new MyConnection().showAll(id).ToList());
}
@model List<DropdownBind.Models.PersonalDetails>
@{
ViewBag.Title = "ShowAllDetails";
}
<h2>ShowAllDetails</h2>
@foreach (var p in Model)
{
<table>
<tr>
<td>Name</td>
<td>@p.Name</td>
</tr>
</table>
foreach (var x in p.Qualifications)
{
<table>
<tr>
<td>@x.className</td>
</tr>
</table>
}
break;
}
procedure sp_show_alldetails
@ID int
as
begin
select
P.ID, P.Name, P.FatherName, C.CityName as City,
P.EmailId, S.StateName as State,
Q.ObtainMarks, Q.MaxMarks, Q.Year, Q.className,
B.BoardName as Board
from
PersonalDetails P
join
QualiFicationDetails Q on Q.ID = P.ID
join
StateMaster S on s.StateID = P.State
join
CityMaster C on C.CityID = P.City
join
BoardMaster B on B.BoardId = Q.Board
where
P.ID = @ID
end