Últimos mensajes - Powered by IBM
- Como saber el usuario logueado en otra PC desde ...
- Formato dinámico con string.format()
- Exportar contenido DataGridView a Excel
- Ignorar horas no laborales
- Problemas con Búsquedas por carácter especifico!
- Suma valores de columna en GridView
- Problema al copiar y pegar texto desde PDF a Word
- cadena de conexión para base de datos en red
- Curso iniciación a Videojuegos utilizando ...
- Crystal Report XI - Visual Studio 2010
Palabras claves
rendimiento a la hora de insertar registros en sql server desde c#
21/09/2007 - 10:04 por Sergio Palacín | Informe spam
Hola.
Mi problema es el siguiente:
Tengo que recuperar registros de una base de datos paradox (con 100.000
registros), tratar los datos e insertarlos en tres tablas diferentes de
SQLServer.
Todo esto lo puedo hacer, pero me cuesta una dos horas hacerlo, lo cual es
totalmente inaceptable.
Primero abría y cerraba una conexión para cada insert, así que simplemente
abrí una conexión y realicé todos insert desde ella.
Como el rendimiento seguía siendo inaceptable, utilice preparecommand, que
creía que ayudaría mucho al rendimiento, pero no ha sido así.
¿Alguien tiene alguna idea? Adjunto el código empleado debajo.
private void importarClientes(string conParadox, string conSQL)
{
CambioTablaEventArgs cambioTablaArgs = new CambioTablaEventArgs();
cambioTablaArgs.nombreTabla = "CLIEMAQ";
cambioTablaArgs.filas = 97761; // Este valor lo he sacado haciendo un select
count(*) de la base de datos. Lo meto directamente porque
// el OLEDB casca con tantos registros
cambioTabla(this, cambioTablaArgs);
StringBuilder sb = new StringBuilder();
DataAccess.ExecuteNonQuery(conSQL, CommandType.Text, "SET IDENTITY_INSERT
[dbo].[MAQUINAS] ON");
string sql = "SELECT
codigo_cliente,Nombre,Direccion,Localidad,Cp,Telefono,Nif,Modelo,NumeroDeSerie,FechaInicioGarantia,"
+
"FechaContrato,NumeroContrato,Distribuidor,NumeroDeFactura,Telefono2,CODIGO_MARCA,fechaInicioGarantia,fechaDeBajaDeContrato
FROM CLIEMAQ";
OleDbDataReader dr = DataAccessDB2.ExecuteReader(conParadox,
CommandType.Text, sql);
SqlConnection con = new SqlConnection(conSQL);
con.Open();
//********************************PREPARAMOS EL COMANDO INSERTAR
CLIENTE***********************
SqlCommand insertCommandCliente = new SqlCommand();
insertCommandCliente.Connection = con;
insertCommandCliente.CommandType = CommandType.Text;
insertCommandCliente.CommandText = "INSERT INTO CLIENTES
(nombre,telefono,dni,movil) " +
"VALUES (@nombre,@telefono,@dni,@movil)";
insertCommandCliente.Parameters.Add("@nombre", SqlDbType.VarChar, 100);
insertCommandCliente.Parameters.Add("@telefono", SqlDbType.VarChar, 9);
insertCommandCliente.Parameters.Add("@dni", SqlDbType.VarChar, 9);
insertCommandCliente.Parameters.Add("@movil", SqlDbType.VarChar, 9);
insertCommandCliente.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO OBTENER
ID_CLIENTE***********************
SqlCommand selectCommandCliente = new SqlCommand();
selectCommandCliente.Connection = con;
selectCommandCliente.CommandType = CommandType.Text;
selectCommandCliente.CommandText = "select @@identity";
selectCommandCliente.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO COMPROBAR
CLIENTE***********************
SqlCommand comprobarCommandCliente = new SqlCommand();
comprobarCommandCliente.Connection = con;
comprobarCommandCliente.CommandType = CommandType.Text;
comprobarCommandCliente.CommandText = "SELECT ID_CLIENTE FROM CLIENTES WHERE
NOMBRE = @nombre";
comprobarCommandCliente.Parameters.Add("@nombre", SqlDbType.VarChar, 100);
comprobarCommandCliente.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO INSERTAR
DIRECCION***********************
SqlCommand insertCommandDireccion = new SqlCommand();
insertCommandDireccion.Connection = con;
insertCommandDireccion.CommandType = CommandType.Text;
insertCommandDireccion.CommandText = "INSERT INTO
DIRECCIONES(id_cliente,direccion,localidad,codigoPostal) " +
"VALUES (@id_cliente,@direccion,@localidad,@codigoPostal)";
insertCommandDireccion.Parameters.Add("@id_cliente", SqlDbType.Int, 4);
insertCommandDireccion.Parameters.Add("@direccion", SqlDbType.VarChar, 500);
insertCommandDireccion.Parameters.Add("@localidad", SqlDbType.VarChar, 100);
insertCommandDireccion.Parameters.Add("@codigopostal", SqlDbType.Int, 4);
insertCommandDireccion.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO OBTENER
ID_DIRECCION***********************
SqlCommand selectCommandDireccion = new SqlCommand();
selectCommandDireccion.Connection = con;
selectCommandDireccion.CommandType = CommandType.Text;
selectCommandDireccion.CommandText = " select @@identity";
selectCommandDireccion.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO COMPROBAR
DIREccion***********************
SqlCommand comprobarCommandDireccion = new SqlCommand();
comprobarCommandDireccion.Connection = con;
comprobarCommandDireccion.CommandType = CommandType.Text;
comprobarCommandDireccion.CommandText = "SELECT ID_DIRECCION FROM
DIRECCIONES WHERE DIRECCION = @direccion AND LOCALIDAD = @localidad";
comprobarCommandDireccion.Parameters.Add("@direccion", SqlDbType.VarChar,
500);
comprobarCommandDireccion.Parameters.Add("@localidad", SqlDbType.VarChar,
100);
comprobarCommandDireccion.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO INSERTAR
MAQUINA***********************
SqlCommand insertCommandMaquina = new SqlCommand();
insertCommandMaquina.Connection = con;
insertCommandMaquina.CommandType = CommandType.Text;
insertCommandMaquina.CommandText = "INSERT INTO
MAQUINAS(id_cliente,id_direccion,id_marca,modelo,serie,fechaGarantia," +
"fechaContrato,numContrato,distribuidor,numFactura,fechaBajaContrato,id_maquina)
VALUES (@id_cliente,@id_direccion,@id_marca,@modelo," +
"@serie,@fechaGarantia,@fechaContrato,@numContrato,@distribuidor,@numFactura,@fechaBajaContrato,@id_maquina)";
insertCommandMaquina.Parameters.Add("@id_cliente", SqlDbType.Int, 4);
insertCommandMaquina.Parameters.Add("@id_direccion", SqlDbType.Int, 4);
insertCommandMaquina.Parameters.Add("@id_marca", SqlDbType.Int, 4);
insertCommandMaquina.Parameters.Add("@modelo", SqlDbType.VarChar, 200);
insertCommandMaquina.Parameters.Add("@serie", SqlDbType.VarChar, 200);
insertCommandMaquina.Parameters.Add("@fechaGarantia", SqlDbType.DateTime,
8);
insertCommandMaquina.Parameters.Add("@fechaContrato", SqlDbType.DateTime,
8);
insertCommandMaquina.Parameters.Add("@numContrato", SqlDbType.VarChar, 10);
insertCommandMaquina.Parameters.Add("@distribuidor", SqlDbType.VarChar,
100);
insertCommandMaquina.Parameters.Add("@numFactura", SqlDbType.VarChar, 10);
insertCommandMaquina.Parameters.Add("@fechaBajaContrato",
SqlDbType.DateTime, 8);
insertCommandMaquina.Parameters.Add("@id_maquina", SqlDbType.Int, 4);
insertCommandMaquina.Prepare();
//************************************************************************************************
int idDireccion;
int idCliente;
bool first = true;
while (dr.Read())
{
try
{
registrosTabla++;
idCliente = comprobarCliente(Convert.ToString(dr["nombre"]),
comprobarCommandCliente);
if (idCliente == 0)
{
if (dr["nif"] is DBNull)
{
insertCommandCliente.Parameters["@dni"].Value = DBNull.Value;
}
else
{
string dni = System.Convert.ToString(dr["nif"]);
dni = dni.Replace("-", "");
dni = dni.Replace(" ", "");
if (dni.Length > 9)
{
sb.Append("Error en el campo dni para el codigo_cliente = " +
Convert.ToString(dr["codigo_cliente"]) +
" dni: " + dni + "");
dni = dni.Substring(dni.Length - 9, 9);
}
insertCommandCliente.Parameters["@dni"].Value = dni;
}
if (dr["nombre"] is DBNull)
{
insertCommandCliente.Parameters["@nombre"].Value = DBNull.Value;
}
else
{
insertCommandCliente.Parameters["@nombre"].Value =
System.Convert.ToString(dr["nombre"]);
}
if (dr["telefono"] is DBNull)
{
insertCommandCliente.Parameters["@telefono"].Value = DBNull.Value;
}
else
{
string telefono = System.Convert.ToString(dr["telefono"]);
telefono = telefono.Replace("-", "");
if (telefono.Length > 9)
{
sb.Append("Error en el campo teléfono para el codigo_cliente = " +
Convert.ToString(dr["codigo_cliente"]) +
" teléfono: " + telefono + "");
telefono = telefono.Substring(telefono.Length - 9, 9);
}
insertCommandCliente.Parameters["@telefono"].Value = telefono;
}
if (dr["telefono2"] is DBNull)
{
insertCommandCliente.Parameters["@movil"].Value = DBNull.Value;
}
else
{
string telefono = System.Convert.ToString(dr["telefono2"]);
telefono = telefono.Replace("-", "");
if (telefono.Length > 9)
{
sb.Append("Error en el campo móvil para el codigo_cliente = " +
Convert.ToString(dr["codigo_cliente"]) +
" móvil: " + telefono + "");
telefono = telefono.Substring(telefono.Length - 9, 9);
}
insertCommandCliente.Parameters["@movil"].Value = telefono;
}
insertCommandCliente.ExecuteNonQuery();
idCliente = Convert.ToInt32(selectCommandCliente.ExecuteScalar());
}
idDireccion = comprobarDireccion(Convert.ToString(dr["direccion"]),
Convert.ToString(dr["localidad"]), comprobarCommandDireccion); ;
if (idDireccion == 0)
{
insertCommandDireccion.Parameters[0].Value = idCliente;
if (dr["direccion"] is DBNull)
{
insertCommandDireccion.Parameters[1].Value = DBNull.Value;
}
else
{
insertCommandDireccion.Parameters[1].Value =
System.Convert.ToString(dr["direccion"]);
}
if (dr["localidad"] is DBNull)
{
insertCommandDireccion.Parameters[2].Value = DBNull.Value;
}
else
{
insertCommandDireccion.Parameters[2].Value =
System.Convert.ToString(dr["localidad"]);
}
if (dr["cp"] is DBNull)
{
insertCommandDireccion.Parameters[3].Value = DBNull.Value;
}
else
{
insertCommandDireccion.Parameters[3].Value =
System.Convert.ToInt32(dr["cp"]);
}
insertCommandDireccion.ExecuteNonQuery();
idDireccion = Convert.ToInt32(selectCommandDireccion.ExecuteScalar());
}
insertCommandMaquina.Parameters["@id_cliente"].Value = idCliente;
insertCommandMaquina.Parameters["@id_direccion"].Value = idDireccion;
if (dr["CODIGO_MARCA"] is DBNull)
{
insertCommandMaquina.Parameters["@id_marca"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@id_marca"].Value =
System.Convert.ToInt32(dr["CODIGO_MARCA"]);
}
if (dr["modelo"] is DBNull)
{
insertCommandMaquina.Parameters["@modelo"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@modelo"].Value =
System.Convert.ToString(dr["modelo"]);
}
if (dr["NumeroDeSerie"] is DBNull)
{
insertCommandMaquina.Parameters["@serie"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@serie"].Value =
System.Convert.ToString(dr["NumeroDeSerie"]);
}
if (dr["fechaInicioGarantia"] is DBNull)
{
insertCommandMaquina.Parameters["@fechaGarantia"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@fechaGarantia"].Value =
System.Convert.ToDateTime(dr["fechaInicioGarantia"]);
}
if (dr["fechaContrato"] is DBNull)
{
insertCommandMaquina.Parameters["@fechaContrato"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@fechaContrato"].Value =
System.Convert.ToDateTime(dr["fechaContrato"]);
}
if (dr["NumeroContrato"] is DBNull)
{
insertCommandMaquina.Parameters["@numContrato"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@numContrato"].Value =
System.Convert.ToString(dr["NumeroContrato"]);
}
if (dr["distribuidor"] is DBNull)
{
insertCommandMaquina.Parameters["@distribuidor"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@distribuidor"].Value =
System.Convert.ToString(dr["distribuidor"]);
}
if (dr["NumeroDeFactura"] is DBNull)
{
insertCommandMaquina.Parameters["@numFactura"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@numFactura"].Value =
System.Convert.ToString(dr["NumeroDeFactura"]);
}
if (dr["fechaDeBajaDeContrato"] is DBNull)
{
insertCommandMaquina.Parameters["@fechaBajaContrato"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@fechaBajaContrato"].Value =
System.Convert.ToDateTime(dr["fechaDeBajaDeContrato"]);
}
if (dr["codigo_cliente"] is DBNull)
{
insertCommandMaquina.Parameters["@id_maquina"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@id_maquina"].Value =
System.Convert.ToInt32(dr["codigo_cliente"]);
}
insertCommandMaquina.ExecuteNonQuery();
first = false;
}
catch (Exception ex2)
{
sb.Append("Error al importar el registro de clientes de codigo_cliente: "
+ Convert.ToString(dr["codigo_cliente"]) + " mensaje: " + ex2.Message);
}
CambioRegistroEventArgs args = new CambioRegistroEventArgs();
args.fila = registrosTabla;
cambioRegistro(this, args);
}
con.Close();
if (sb.ToString() != "")
{
if (!File.Exists(pathLog))
{
File.Create(pathLog);
}
StreamReader sr = new StreamReader(pathLog);
string s = sr.ReadToEnd();
sb = sb.Insert(0, s);
sr.Close();
StreamWriter sw = File.CreateText(pathLog);
sw.Write(sb.ToString());
sw.Flush();
sw.Close();
}
DataAccess.ExecuteNonQuery(conSQL, CommandType.Text, "SET IDENTITY_INSERT
[dbo].[MAQUINAS] OFF");
registrosTabla = 0;
}
Mi problema es el siguiente:
Tengo que recuperar registros de una base de datos paradox (con 100.000
registros), tratar los datos e insertarlos en tres tablas diferentes de
SQLServer.
Todo esto lo puedo hacer, pero me cuesta una dos horas hacerlo, lo cual es
totalmente inaceptable.
Primero abría y cerraba una conexión para cada insert, así que simplemente
abrí una conexión y realicé todos insert desde ella.
Como el rendimiento seguía siendo inaceptable, utilice preparecommand, que
creía que ayudaría mucho al rendimiento, pero no ha sido así.
¿Alguien tiene alguna idea? Adjunto el código empleado debajo.
private void importarClientes(string conParadox, string conSQL)
{
CambioTablaEventArgs cambioTablaArgs = new CambioTablaEventArgs();
cambioTablaArgs.nombreTabla = "CLIEMAQ";
cambioTablaArgs.filas = 97761; // Este valor lo he sacado haciendo un select
count(*) de la base de datos. Lo meto directamente porque
// el OLEDB casca con tantos registros
cambioTabla(this, cambioTablaArgs);
StringBuilder sb = new StringBuilder();
DataAccess.ExecuteNonQuery(conSQL, CommandType.Text, "SET IDENTITY_INSERT
[dbo].[MAQUINAS] ON");
string sql = "SELECT
codigo_cliente,Nombre,Direccion,Localidad,Cp,Telefono,Nif,Modelo,NumeroDeSerie,FechaInicioGarantia,"
+
"FechaContrato,NumeroContrato,Distribuidor,NumeroDeFactura,Telefono2,CODIGO_MARCA,fechaInicioGarantia,fechaDeBajaDeContrato
FROM CLIEMAQ";
OleDbDataReader dr = DataAccessDB2.ExecuteReader(conParadox,
CommandType.Text, sql);
SqlConnection con = new SqlConnection(conSQL);
con.Open();
//********************************PREPARAMOS EL COMANDO INSERTAR
CLIENTE***********************
SqlCommand insertCommandCliente = new SqlCommand();
insertCommandCliente.Connection = con;
insertCommandCliente.CommandType = CommandType.Text;
insertCommandCliente.CommandText = "INSERT INTO CLIENTES
(nombre,telefono,dni,movil) " +
"VALUES (@nombre,@telefono,@dni,@movil)";
insertCommandCliente.Parameters.Add("@nombre", SqlDbType.VarChar, 100);
insertCommandCliente.Parameters.Add("@telefono", SqlDbType.VarChar, 9);
insertCommandCliente.Parameters.Add("@dni", SqlDbType.VarChar, 9);
insertCommandCliente.Parameters.Add("@movil", SqlDbType.VarChar, 9);
insertCommandCliente.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO OBTENER
ID_CLIENTE***********************
SqlCommand selectCommandCliente = new SqlCommand();
selectCommandCliente.Connection = con;
selectCommandCliente.CommandType = CommandType.Text;
selectCommandCliente.CommandText = "select @@identity";
selectCommandCliente.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO COMPROBAR
CLIENTE***********************
SqlCommand comprobarCommandCliente = new SqlCommand();
comprobarCommandCliente.Connection = con;
comprobarCommandCliente.CommandType = CommandType.Text;
comprobarCommandCliente.CommandText = "SELECT ID_CLIENTE FROM CLIENTES WHERE
NOMBRE = @nombre";
comprobarCommandCliente.Parameters.Add("@nombre", SqlDbType.VarChar, 100);
comprobarCommandCliente.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO INSERTAR
DIRECCION***********************
SqlCommand insertCommandDireccion = new SqlCommand();
insertCommandDireccion.Connection = con;
insertCommandDireccion.CommandType = CommandType.Text;
insertCommandDireccion.CommandText = "INSERT INTO
DIRECCIONES(id_cliente,direccion,localidad,codigoPostal) " +
"VALUES (@id_cliente,@direccion,@localidad,@codigoPostal)";
insertCommandDireccion.Parameters.Add("@id_cliente", SqlDbType.Int, 4);
insertCommandDireccion.Parameters.Add("@direccion", SqlDbType.VarChar, 500);
insertCommandDireccion.Parameters.Add("@localidad", SqlDbType.VarChar, 100);
insertCommandDireccion.Parameters.Add("@codigopostal", SqlDbType.Int, 4);
insertCommandDireccion.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO OBTENER
ID_DIRECCION***********************
SqlCommand selectCommandDireccion = new SqlCommand();
selectCommandDireccion.Connection = con;
selectCommandDireccion.CommandType = CommandType.Text;
selectCommandDireccion.CommandText = " select @@identity";
selectCommandDireccion.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO COMPROBAR
DIREccion***********************
SqlCommand comprobarCommandDireccion = new SqlCommand();
comprobarCommandDireccion.Connection = con;
comprobarCommandDireccion.CommandType = CommandType.Text;
comprobarCommandDireccion.CommandText = "SELECT ID_DIRECCION FROM
DIRECCIONES WHERE DIRECCION = @direccion AND LOCALIDAD = @localidad";
comprobarCommandDireccion.Parameters.Add("@direccion", SqlDbType.VarChar,
500);
comprobarCommandDireccion.Parameters.Add("@localidad", SqlDbType.VarChar,
100);
comprobarCommandDireccion.Prepare();
//************************************************************************************************
//********************************PREPARAMOS EL COMANDO INSERTAR
MAQUINA***********************
SqlCommand insertCommandMaquina = new SqlCommand();
insertCommandMaquina.Connection = con;
insertCommandMaquina.CommandType = CommandType.Text;
insertCommandMaquina.CommandText = "INSERT INTO
MAQUINAS(id_cliente,id_direccion,id_marca,modelo,serie,fechaGarantia," +
"fechaContrato,numContrato,distribuidor,numFactura,fechaBajaContrato,id_maquina)
VALUES (@id_cliente,@id_direccion,@id_marca,@modelo," +
"@serie,@fechaGarantia,@fechaContrato,@numContrato,@distribuidor,@numFactura,@fechaBajaContrato,@id_maquina)";
insertCommandMaquina.Parameters.Add("@id_cliente", SqlDbType.Int, 4);
insertCommandMaquina.Parameters.Add("@id_direccion", SqlDbType.Int, 4);
insertCommandMaquina.Parameters.Add("@id_marca", SqlDbType.Int, 4);
insertCommandMaquina.Parameters.Add("@modelo", SqlDbType.VarChar, 200);
insertCommandMaquina.Parameters.Add("@serie", SqlDbType.VarChar, 200);
insertCommandMaquina.Parameters.Add("@fechaGarantia", SqlDbType.DateTime,
8);
insertCommandMaquina.Parameters.Add("@fechaContrato", SqlDbType.DateTime,
8);
insertCommandMaquina.Parameters.Add("@numContrato", SqlDbType.VarChar, 10);
insertCommandMaquina.Parameters.Add("@distribuidor", SqlDbType.VarChar,
100);
insertCommandMaquina.Parameters.Add("@numFactura", SqlDbType.VarChar, 10);
insertCommandMaquina.Parameters.Add("@fechaBajaContrato",
SqlDbType.DateTime, 8);
insertCommandMaquina.Parameters.Add("@id_maquina", SqlDbType.Int, 4);
insertCommandMaquina.Prepare();
//************************************************************************************************
int idDireccion;
int idCliente;
bool first = true;
while (dr.Read())
{
try
{
registrosTabla++;
idCliente = comprobarCliente(Convert.ToString(dr["nombre"]),
comprobarCommandCliente);
if (idCliente == 0)
{
if (dr["nif"] is DBNull)
{
insertCommandCliente.Parameters["@dni"].Value = DBNull.Value;
}
else
{
string dni = System.Convert.ToString(dr["nif"]);
dni = dni.Replace("-", "");
dni = dni.Replace(" ", "");
if (dni.Length > 9)
{
sb.Append("Error en el campo dni para el codigo_cliente = " +
Convert.ToString(dr["codigo_cliente"]) +
" dni: " + dni + "");
dni = dni.Substring(dni.Length - 9, 9);
}
insertCommandCliente.Parameters["@dni"].Value = dni;
}
if (dr["nombre"] is DBNull)
{
insertCommandCliente.Parameters["@nombre"].Value = DBNull.Value;
}
else
{
insertCommandCliente.Parameters["@nombre"].Value =
System.Convert.ToString(dr["nombre"]);
}
if (dr["telefono"] is DBNull)
{
insertCommandCliente.Parameters["@telefono"].Value = DBNull.Value;
}
else
{
string telefono = System.Convert.ToString(dr["telefono"]);
telefono = telefono.Replace("-", "");
if (telefono.Length > 9)
{
sb.Append("Error en el campo teléfono para el codigo_cliente = " +
Convert.ToString(dr["codigo_cliente"]) +
" teléfono: " + telefono + "");
telefono = telefono.Substring(telefono.Length - 9, 9);
}
insertCommandCliente.Parameters["@telefono"].Value = telefono;
}
if (dr["telefono2"] is DBNull)
{
insertCommandCliente.Parameters["@movil"].Value = DBNull.Value;
}
else
{
string telefono = System.Convert.ToString(dr["telefono2"]);
telefono = telefono.Replace("-", "");
if (telefono.Length > 9)
{
sb.Append("Error en el campo móvil para el codigo_cliente = " +
Convert.ToString(dr["codigo_cliente"]) +
" móvil: " + telefono + "");
telefono = telefono.Substring(telefono.Length - 9, 9);
}
insertCommandCliente.Parameters["@movil"].Value = telefono;
}
insertCommandCliente.ExecuteNonQuery();
idCliente = Convert.ToInt32(selectCommandCliente.ExecuteScalar());
}
idDireccion = comprobarDireccion(Convert.ToString(dr["direccion"]),
Convert.ToString(dr["localidad"]), comprobarCommandDireccion); ;
if (idDireccion == 0)
{
insertCommandDireccion.Parameters[0].Value = idCliente;
if (dr["direccion"] is DBNull)
{
insertCommandDireccion.Parameters[1].Value = DBNull.Value;
}
else
{
insertCommandDireccion.Parameters[1].Value =
System.Convert.ToString(dr["direccion"]);
}
if (dr["localidad"] is DBNull)
{
insertCommandDireccion.Parameters[2].Value = DBNull.Value;
}
else
{
insertCommandDireccion.Parameters[2].Value =
System.Convert.ToString(dr["localidad"]);
}
if (dr["cp"] is DBNull)
{
insertCommandDireccion.Parameters[3].Value = DBNull.Value;
}
else
{
insertCommandDireccion.Parameters[3].Value =
System.Convert.ToInt32(dr["cp"]);
}
insertCommandDireccion.ExecuteNonQuery();
idDireccion = Convert.ToInt32(selectCommandDireccion.ExecuteScalar());
}
insertCommandMaquina.Parameters["@id_cliente"].Value = idCliente;
insertCommandMaquina.Parameters["@id_direccion"].Value = idDireccion;
if (dr["CODIGO_MARCA"] is DBNull)
{
insertCommandMaquina.Parameters["@id_marca"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@id_marca"].Value =
System.Convert.ToInt32(dr["CODIGO_MARCA"]);
}
if (dr["modelo"] is DBNull)
{
insertCommandMaquina.Parameters["@modelo"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@modelo"].Value =
System.Convert.ToString(dr["modelo"]);
}
if (dr["NumeroDeSerie"] is DBNull)
{
insertCommandMaquina.Parameters["@serie"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@serie"].Value =
System.Convert.ToString(dr["NumeroDeSerie"]);
}
if (dr["fechaInicioGarantia"] is DBNull)
{
insertCommandMaquina.Parameters["@fechaGarantia"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@fechaGarantia"].Value =
System.Convert.ToDateTime(dr["fechaInicioGarantia"]);
}
if (dr["fechaContrato"] is DBNull)
{
insertCommandMaquina.Parameters["@fechaContrato"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@fechaContrato"].Value =
System.Convert.ToDateTime(dr["fechaContrato"]);
}
if (dr["NumeroContrato"] is DBNull)
{
insertCommandMaquina.Parameters["@numContrato"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@numContrato"].Value =
System.Convert.ToString(dr["NumeroContrato"]);
}
if (dr["distribuidor"] is DBNull)
{
insertCommandMaquina.Parameters["@distribuidor"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@distribuidor"].Value =
System.Convert.ToString(dr["distribuidor"]);
}
if (dr["NumeroDeFactura"] is DBNull)
{
insertCommandMaquina.Parameters["@numFactura"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@numFactura"].Value =
System.Convert.ToString(dr["NumeroDeFactura"]);
}
if (dr["fechaDeBajaDeContrato"] is DBNull)
{
insertCommandMaquina.Parameters["@fechaBajaContrato"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@fechaBajaContrato"].Value =
System.Convert.ToDateTime(dr["fechaDeBajaDeContrato"]);
}
if (dr["codigo_cliente"] is DBNull)
{
insertCommandMaquina.Parameters["@id_maquina"].Value = DBNull.Value;
}
else
{
insertCommandMaquina.Parameters["@id_maquina"].Value =
System.Convert.ToInt32(dr["codigo_cliente"]);
}
insertCommandMaquina.ExecuteNonQuery();
first = false;
}
catch (Exception ex2)
{
sb.Append("Error al importar el registro de clientes de codigo_cliente: "
+ Convert.ToString(dr["codigo_cliente"]) + " mensaje: " + ex2.Message);
}
CambioRegistroEventArgs args = new CambioRegistroEventArgs();
args.fila = registrosTabla;
cambioRegistro(this, args);
}
con.Close();
if (sb.ToString() != "")
{
if (!File.Exists(pathLog))
{
File.Create(pathLog);
}
StreamReader sr = new StreamReader(pathLog);
string s = sr.ReadToEnd();
sb = sb.Insert(0, s);
sr.Close();
StreamWriter sw = File.CreateText(pathLog);
sw.Write(sb.ToString());
sw.Flush();
sw.Close();
}
DataAccess.ExecuteNonQuery(conSQL, CommandType.Text, "SET IDENTITY_INSERT
[dbo].[MAQUINAS] OFF");
registrosTabla = 0;
}
Leer las respuestas