Hai ragione...sembra funzionare perfettamente
ovvero non ho problemi di caratteri non validi, non debbo gestire i separatori dei decimali e il file è piu leggero...solo ci mette piu tempo rispetto dataset.xmlwriter/reader.
Pero quando importo in tabella tronca i valori dei campi note (vedo solo un carattere nel campo) !!!
ho serializzato cosi:
String path = Server.MapPath("~/App_data/TABELLA.bin");
if (File.Exists(path))
{
File.Delete(path);
}
String constr = ConfigurationManager.ConnectionStrings["ExportBackupConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(constr))
{
String select = "SELECT .... FROM TABELLA";
using (SqlCommand comm = new SqlCommand(select, conn))
{
conn.Open();
SqlDataReader reader = comm.ExecuteReader();
BinaryFormatter formatter = new BinaryFormatter();
while (reader.Read())
{
TABELLA myTabella = new TABELLA();
myTabella.Anno = reader.GetInt16(0);
myTabella.xxx = reader.GetString(1);
myTabella.xxx = reader.GetString(2);
...
using (FileStream stream = new FileStream(path, FileMode.Append, FileAccess.Write))
{
formatter.Serialize(stream, myTabella);
}
}
}
}
e deserializzato cosi:
long position = 0;
String path = Server.MapPath("~/App_data/TABELLA.bin");
BinaryFormatter formatter = new BinaryFormatter();
TABELLA myTABELLA = null;
using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
ConnectionImport impconn = new ConnectionImport();
var openedConn = impconn.OpenConnection();
while (position < stream.Length)
{
stream.Seek(position, SeekOrigin.Begin);
myTABELLA = (TABELLA)formatter.Deserialize(stream);
position = stream.Position;
myTABELLA.Insert(openedConn, myTABELLA);
}
impconn.CloseDisposeConnection();
}
ho creato una classe che rappresentasse la tabella e ho scritto un metodo insert:
public void Insert(SqlConnection ImportConn, TABELLA vTABELLA)
{
using (SqlCommand command = new SqlCommand("InsertTABELLA", ImportConn))
{
command.CommandType = System.Data.CommandType.StoredProcedure;
command.Parameters.AddWithValue("@Anno", this.Anno); //smallint,
command.Parameters.AddWithValue("@XXX", this.XXX); //varchar,
int numRec = command.ExecuteNonQuery();
}
}
Che dici sbaglio qualcosa...si può rendere piu performante ?
grazie comunque infinite...non avevo provato la serializzazione binaria
Modificato da jjchuck il 15 marzo 2016 18.12 -
Modificato da jjchuck il 15 marzo 2016 18.41 -