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

问题描述

我已经创建了这种“ 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中提取值时,无需在字段名称前添加别名。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...