- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
protected static DataTable[] ExecuteDataTablesReader(string ProcedureName, SqlParameter[] Params = null) {
SqlConnection cnn = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand(ProcedureName, cnn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
if (Params != null && Params.Count() > 0) {
cmd.Parameters.AddRange(Params);
}
cnn.Open();
IDataReader rd = cmd.ExecuteReader();
List<DataTable> tables = new List<DataTable>();
do {
DataTable dt = new DataTable();
dt.Load(rd);
tables.Add(dt);
} while (rd.NextResult());
return tables.ToArray();
}
может я чего не понимаю, но какого хера rd.NextResult() кидает мне exception, что ридер закрыт?
vertu 26.11.2014 13:38 # 0
Lokich 26.11.2014 14:03 # 0
в любом случае, он закрывался перед чтением последнего рекордсета. если их два - падал при чтении второго, если три - при третьем.
vertu 26.11.2014 14:13 # 0
vertu 26.11.2014 14:15 # 0
Lokich 26.11.2014 15:40 # 0
vertu 26.11.2014 15:47 # 0
Lokich 26.11.2014 16:07 # 0
vertu 26.11.2014 16:22 # 0
Lokich 26.11.2014 16:55 # 0
не вижу проблем в использовании DataTable. а вообще, конкретно тут они используются для того, чтобы выгружать DataTable на каждый лист xlsx в Epplus (благо там это делается одной строчкой).
а список я делал, чтобы не переопределять размер массива. да, плохо, но я ленивый.
SqlDataAdapter штука конечно же ужасно удобная, и при этом медленная.
Vasiliy 26.11.2014 15:47 # 0
Lokich 26.11.2014 16:13 # 0
Vasiliy 26.11.2014 18:49 # 0
Lokich 27.11.2014 11:52 # 0