Я регидратация моих бизнес-объектов путем сбора данных из нескольких таблиц, например,MARS против NextResult
SELECT * FROM CaDataTable; SELECT * FROM NyDataTable; SELECT * FROM WaDataTable;
и так далее ... (C# 3.5, SQL Server 2005)
Я использую партии:
void BatchReader()
{
string sql = "Select * From CaDataTable" +
"Select * From NyDataTable" +
"Select * From WaDataTable";
string connectionString = GetConnectionString();
using (SqlConnection conn = new SqlConnection(connectionString)) {
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
using (SqlDataReader reader = cmd.ExecuteReader()) {
do {
while (reader.Read()) {
ReadRecords(reader);
}
} while (reader.NextResult());
}
}
}
Я также использовал несколько команд против одной и той же связи:
void MultipleCommandReader()
{
string connectionString = GetConnectionString();
string sql;
SqlCommand cmd;
using (SqlConnection conn = new SqlConnection(connectionString)) {
conn.Open();
sql = "Select * From CaDataTable";
cmd = new SqlCommand(sql, conn);
using (SqlDataReader reader = cmd.ExecuteReader()) {
while (reader.Read()) {
ReadRecords(reader);
}
}
sql = "Select * From NyDataTable";
cmd = new SqlCommand(sql, conn);
using (SqlDataReader reader = cmd.ExecuteReader()) {
while (reader.Read()) {
ReadRecords(reader);
}
}
sql = "Select * From WaDataTable";
cmd = new SqlCommand(sql, conn);
using (SqlDataReader reader = cmd.ExecuteReader()) {
while (reader.Read()) {
ReadRecords(reader);
}
}
}
}
Является ли один из этих методов значительно лучше, чем другой? Кроме того, будет ли выигрыш, если я использую MARS для второго метода? Другими словами, это так же просто, как установка MultipleActiveResultSets = True в строке подключения и получение большого преимущества?
Спасибо, это отличная альтернатива. Есть ли способ закодировать это, если я точно не знаю, что каждая из таблиц существует? Другими словами, как можно защитить от ситуации, когда NyDataTable не существует? – Sisiutl
Я бы построил вышеуказанный запрос динамически на основе информации, полученной из: select * from information_schema.tables – RedFilter