如何通过 SqlDataReader 从 LEFT JOIN 打印值?

How to print value from LEFT JOIN through SqlDataReader?

我已经创建了这个“ShowSubcategories”方法,它工作得很好!

我还尝试使用内置命令“SqlDataReader”这似乎工作得很好, 直到我尝试使用左连接输出实际的类别名称,而不仅仅是 sdr[2] 中的类别 ID。

我应该如何使用 sqldatareader 中的左连接输出,否则就在这里尝试? sdr["类别名称"]

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

查询只能 return 出现在 SELECT 语句之后的字段。
如果 CategoryName 属于 table Categories 那么您需要将其添加到 SELECT 语句中。

在这些情况下,最好创建 tablenames ALIAS(代表查询中 table 名称的短字符串)。如您所见,查询更清晰,文本更短

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 中提取值时,您不需要在字段名称前加上别名。