Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Sql命令中的数据填充Datatable-行,并使用多个selectquery_C#_Asp.net_Sql - Fatal编程技术网

C# 使用Sql命令中的数据填充Datatable-行,并使用多个selectquery

C# 使用Sql命令中的数据填充Datatable-行,并使用多个selectquery,c#,asp.net,sql,C#,Asp.net,Sql,我有以下功能: private static DataTable GetDataFromDatabase(DateTime myDate) { DataTable table = new DataTable(); table.Columns.AddRange(new DataColumn[] { new DataColumn("Event"), new DataColumn("Room"), new DataColumn("From"), n

我有以下功能:

private static DataTable GetDataFromDatabase(DateTime myDate)
{
    DataTable table = new DataTable();
    table.Columns.AddRange(new DataColumn[]
    { 
       new DataColumn("Event"), new DataColumn("Room"),
       new DataColumn("From"), new DataColumn("To"), new DataColumn("Persons"),
       new DataColumn("Equipment"), new DataColumn("Catering")
    });

    string strSQL = "SELECT distinct ID FROM VIEW_RAUMBUCHUNG_DISPO " + 
                    "WHERE BOOKSTATUS >= 1 AND convert(char, von,104) = '" + 
                    BookITVbSQL.to_104(myDate) + "'";
    SqlDataReader objRS;
    objRS = SQLrunReaderDP(strSQL);

    while (objRS.Read())
    {
        using (SqlConnection con = new SqlConnection(GetConnectionString()))
        {
            using (SqlCommand cmd = con.CreateCommand())
            {
                con.Open();
                cmd.CommandText = "SELECT distinct EVENT, ROOM, CONVERT(char(5), from, 108) " + 
                "FROM, CONVERT(char(5), to, 108) TO, PERSONS FROM VIEW_RAUMBUCHUNG_DISPO " + 
                "WHERE ID = '" + objRS["ID"] + "'; " +
                "SELECT EQUIPMENTNAME FROM EQUIPMENT WHERE BUCHUNG_ID = '" + objRS["ID"] + 
                "' and STATUS = '2'; " +
                "SELECT CATERINGNAME FROM CATERING WHERE BUCHUNG_ID = '" + objRS["ID"] + 
                "' and STATUS = '1';";

                using (SqlDataReader rdr = cmd.ExecuteReader())
                {
                    do
                    {
                        while (rdr.Read())
                        {
                            table.Rows.Add(
                                rdr["EVENT"],
                                rdr["ROOM"],
                                rdr["FROM"],
                                rdr["TO"],
                                rdr["PERSONS"] );


                        }
                    }
                    while (rdr.NextResult());
                    rdr.Close();
                }
                con.Close();
            }
        }
    }
    return table;
}
对于第一个语句,这很好。我可以从五列中获得所有数据。 但是如何将其他两个查询中的列添加到同一行

如果我尝试:

 while (rdr.Read())
 {
     table.Rows.Add(
             rdr["EVENT"],
             rdr["ROOM"],
             rdr["FROM"],
             rdr["TO"],
             rdr["PERSONS"],
             rdr["EQUIPMENTNAME"]);
  }
所以我得到了一个IndexOutfrange例外。 有人能帮我吗?

SqlDataReader类:

提供一种从SQL Server数据库读取仅向前的行流的方法

您可以使用该类生成包含2个联接的单个语句。它将返回7列

"SELECT distinct EVENT, ROOM, CONVERT(char(5), from, 108) FROM, CONVERT(char(5), to, 108) TO, PERSONS, EQUIPMENTNAME, CATERINGNAME FROM VIEW_RAUMBUCHUNG_DISPO T1"

+ "INNER JOIN (SELECT EQUIPMENTNAME FROM EQUIPMENT) T2 ON T1.ID = T2.BUCHUNG_ID"

+ "INNER JOIN (SELECT CATERINGNAME FROM CATERING) T3 ON T1.ID = T3.BUCHUNG_ID" +

+ "WHERE T1.ID = '" + objRS["ID"] + "' AND T2.STATUS = '2' AND T3.STATUS = '1' "
更新

使用
NextResult
方法:

读取批处理Transact-SQL语句的结果时,使数据读取器前进到下一个结果


如果需要访问整个记录集,而不是一次访问一行,则可以使用SqlDataAdapter()。

是否需要
CATERINGNAME
column?两列名为
to
?我想这是一个打字错误。是的,我可以做一个陈述,但我的问题是如何用几个问句来完成。无法使用联接的查询