Bonjour à tous,
j'ai réussi a générer un zip depuis des fichiers contenus dans une base de données le tout en stream quand on clique sur un bouton de ma page.
Jusque la pas de soucis.
J'ai ensuite voulu mettre ce code dans une page de recherche et là ce code ne fonctionne plus.
J'ai cherché l'erreur et il s'avère que l'erreur survient si une DropDownList des critères de recherche (alimentée par la BDD) dépasse 300 Items, apparemment cela corrompt mon fichier zip en polluant le Response.OutputStream(il me semble)
J'ai 1279 Items à mettre dans cette dropdownlist (La solution facile serait de faire un filtre sur la DDL mais cela va être moche) existe t il une solution ?
Je vous met ici mon code qui génère le fichier zip a partir de fichiers contenus dans la base de données (j'utilise DotNetZip)
Code ASP.NET :
#region Download
protected void btn_dl_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
using (SqlConnection Conn = new SqlConnection(Utility.ConnectionString))
{
const string SQL = "SELECT fichier, nom_fichier FROM Table_NC"; //Ici la requète SQL permettant de récupérer les fichiers de la BDD
SqlCommand cmd = new SqlCommand(SQL, Conn);
SqlDataAdapter sda = new SqlDataAdapter();
cmd.CommandType = CommandType.Text;
cmd.Connection = Conn;
try
{
Conn.Open();
sda.SelectCommand = cmd;
sda.Fill(dt);
}
catch (Exception ex)
{ }
finally
{
Conn.Close();
sda.Dispose();
Conn.Dispose();
}
}
download(dt);
}
private void download(DataTable dt)
{
using (var zip = new ZipFile())
{
for (int i = 0; i < dt.Rows.Count; i++)
{
zip.AddEntry(dt.Rows[i]["nom_fichier"].ToString(), (byte[])dt.Rows[i]["fichier"]);
}
zip.Save(Response.OutputStream);
}
}
#endregion
Pour alimenter ma DDL j'utilise simplement une requête SQL qui renseigne des ListItem qui eux même alimentent ma DDL
Code ASP.NET :
DDL_fourn_ext.Items.Clear();
DDL_fourn_ext.Items.Add("");
Utility.dbcon.connect();
Utility.dbcon.exec_Query("SELECT id_fourn, nom_fourn FROM Table_fourn ORDER BY tf.nom_fourn ASC");
while (Utility.dbcon.reader.Read())
{
ListItem li = new ListItem(Utility.dbcon.reader.GetValue(1).ToString(), Utility.dbcon.reader.GetValue(0).ToString());
DDL_fourn_ext.Items.Add(li);
}
Utility.dbcon.reader.Close();
Utility.dbcon.disconnect();