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
?我想这是一个打字错误。是的,我可以做一个陈述,但我的问题是如何用几个问句来完成。无法使用联接的查询