问题描述
我已经创建了这种“ ShowSubcategories”方法,并且可以正常工作!
我也尝试使用内置命令“ sqlDataReader”,这似乎很好用, 直到我尝试使用左联接输出实际的类别名称,而不仅仅是sdr [2]中的类别ID。
我应该如何在sqldatareader中使用左连接输出,否则在这里尝试? sdr [“ CategoryName”]
public static void ShowSubCategories(sqlConnection conn)
{
string sql = (@"SELECT SubCategoryID,SubCategoryName,CategoryID,SubCategoryEmployeeID FROM SubCategories
left join Categories on SubCategories.CategoryID=Categories.CategoryID");
sqlCommand command = new sqlCommand(sql,conn);
sqlDataReader sdr = command.ExecuteReader();
while (sdr.Read())
{
Console.WriteLine("{0,-5} {1,-10} {2,-10} {3,-10}",sdr[0],sdr[1],sdr["CategoryName"],sdr[3]);
}
sdr.Close();
}
解决方法
查询只能返回SELECT语句之后的字段。
如果 CategoryName 属于表 Categories ,那么您需要将其添加到SELECT语句中。
在这些情况下,创建表名ALIAS(表示查询中表名的短字符串)是一个好习惯。如您所见,查询更清晰,文字更短
public static void ShowSubCategories(SqlConnection conn)
{
string SQL = (@"SELECT sc.SubCategoryID,sc.SubCategoryName,sc.CategoryID,sc.SubCategoryEmployeeID,c.CategoryName
FROM SubCategories sc
LEFT JOIN Categories c ON sc.CategoryID=c.CategoryID");
SqlCommand command = new SqlCommand(SQL,conn);
SqlDataReader sdr = command.ExecuteReader();
while (sdr.Read())
{
Console.WriteLine("{0,-5} {1,-10} {2,-10} {3,-10}",sdr[0],sdr[1],sdr["CategoryName"],sdr[3]);
}
sdr.Close();
}
还请注意,从DataReader中提取值时,无需在字段名称前添加别名。