Foros del Web » Programando para Internet » ASPX (.net) »

mySQL con conexión DNS

Estas en el tema de mySQL con conexión DNS en el foro de ASPX (.net) en Foros del Web. Hola que tal, después de muchos dolores de cabeza y problemas, no he podido concluir mi aplicación por unas cosas que me pasa con el ...
  #1 (permalink)  
Antiguo 25/04/2007, 13:19
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 18 años, 10 meses
Puntos: 50
Pregunta mySQL con conexión DNS

Hola que tal, después de muchos dolores de cabeza y problemas, no he podido concluir mi aplicación por unas cosas que me pasa con el driver de mysql, cual es el asunto:

tengo mi cadena de conexión
Código:
    <add key="CS" value ="Driver={MySQL ODBC x.xy Driver};Server=177.177.177.177;Port=3306;Database=basesota;User=xxx;Password=xxx;"  />
la cual funciona bien con el oledbclient

cuando quiero insertar, por ejemplo un dato a una tabla, utilizo la siguiente consulta

Código:
insert into tabla (primerCampo, segundoCampo, etc) values (@Q1,@Q2,@Q3)
y para insertar los parámetros en el command hago lo siguiente

Código:
comando.Parameters.Add("@Q1", OdbcType.VarChar, 70);
comando.Parameters["@Q1"].Value = txtNombre.Text.ToUpper();
.
.
.
y así con cada uno de los parámetros, pero, cuando lo ejecuto y paso por punto de interrupción me manda el siguiente error:

Código:
ERROR [HY000] [MySQL][ODBC 3.51 Driver][mysqld-4.0.21-nt]Column 'sName' cannot be null 
entonces lo que estaba haciendo era, colocar en la instrucción sql las comillas entre cada parámetro >>'@Q1'<< y después me mandaba el error en la siguiente columna con lo mismo, cuando por fin le puse comillas a todos me ejecuto pero, o sorpresa, me guardo el parámetro, en este caso me vi bien piedra por que lo que guardaba era el @Q1, Que problema puedo tener.

PD. el formulario tiene una serie de dropdowns que hacen un autopostback, puede ser eso lo que me provoca el error siendo que las cajas de texto aun así se quedan con la información?

Gracias
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.

Última edición por erick_arcini; 25/04/2007 a las 14:36
  #2 (permalink)  
Antiguo 25/04/2007, 13:30
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: mySQL con conexión DNS

Hey! no deberías poner datos válidos para conectarte a tu base de datos en un foro público.

Sobre tu problema, pon el código que actualmente estás usando (puede ser que te hayas olvidado de pasar un valor para la columna sName)

Por cierto, alguna razón en especial para no usar un proveedor .net específico para MySQL?

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 25/04/2007, 14:35
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 18 años, 10 meses
Puntos: 50
Re: mySQL con conexión DNS

Cita:
Iniciado por xknown Ver Mensaje
Hey! no deberías poner datos válidos para conectarte a tu base de datos en un foro público.

Sobre tu problema, pon el código que actualmente estás usando (puede ser que te hayas olvidado de pasar un valor para la columna sName)

Por cierto, alguna razón en especial para no usar un proveedor .net específico para MySQL?

Saludos
Gracias por el dato, ya le cambie, voy a tener que cambiar la bd por cualquier cosa.

sobre lo del código, por ejemplo en el insert, estaba haciendo lo siguiente:

Código:
string consultaInsert = "INSERT INTO employee VALUES ('@q1',@q2,@q3,@q4,@q5," +
    "@q7,@q8,@q9,@q10,@q11,@q12,@q13," +
    "@q14,@q15,@q16,@q17,@q18,@q19," +
    "@q20,@q21,@q22,@q23,@q24," +
    "@q25,@q26, @q27);";
y cuando lo ejecutaba, en este caso la columna sName me ponía el parámetro @Q1 y no lloraba, pero con el paso del tiempo, para @Q2 ahora me mandaba error en el siguiente campo llamado sLastName, y así sucesivamente, y lo raro es que asi lo estaba manejando bien pero tuve que cambiarlo al otro controlador "odbc", por que razón, bueno, los dichosos donde tengo hospedada la pagina la conexión la tienen por medio de MyODBC, yo, para crear el formulario y probarlo local usaba el mysqlclient pero por esa razón tuve que cambiar.

Gracias por la ayuda.
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
  #4 (permalink)  
Antiguo 25/04/2007, 14:50
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: mySQL con conexión DNS

Hmm, el último codigo que pusiste no ayuda mucho tampoco porque tampoco pones la estructura de la tabla..., haz la prueba especificando explícitamente los valores que vas a insertar:

insert into employee (campo1, campo2, ...) values (@q1, @q2, ...)

Por cierto, me parece que deberías prestarle un poquito más de atención al acceso a datos (talvez haciendo un generador de código o usando algún ORM)

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #5 (permalink)  
Antiguo 25/04/2007, 16:18
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 18 años, 10 meses
Puntos: 50
Re: mySQL con conexión DNS

mira, lo que puse anteriormente lo hice para no hacer tan engorrosa la información, pero en vista que no he aportado lo suficiente aquí va todo, en si, mi consulta a esa tabla esta de la siguiente forma:

Código:
"INSERT INTO employee (sName, sLastName, sLastName2, gender, dBirth, sCity, sAdress, sPC, sphone, sMobilePhone, sMail, sIMSSNumber, sRFCNumber, bPassport, sPassport, bVisa, dExpiration, sPosition, dPosition, idAbout, bFilled, bGroup, sWorkedIn, sWhen, idAvailability, sIdentification) VALUES (@Name, @LastName, @LastName2, @Gender, @Birth, @City, @Adress, @PC, @Phone, @Mobile, @mail, @IMSS, @RFC, @Passport, @PassportNumber, @Visa, @VisaExpirate, @Position, @DatePosition, @idAbout, @FilledApp, @Gruop, @WorkGroup, @WhenWork, @idAvailability, @Identification);";
Nota: no preguntes del por que de tantos datos, lo mismo les dije a los que querían el formulario y no accedieron a quitar información indebida, les dije que la dividía por tablas pero nunca quisieron, y los parameters los tengo de la siguiente forma
Código:
         OdbcCommand comando = new OdbcCommand();

            //nombre completo
            comando.Parameters.Add("@q1", OdbcType.VarChar, 70);
            comando.Parameters["@q1"].Value = txtNombre.Text.ToUpper();
            
            comando.Parameters.Add("@q2", OdbcType.VarChar, 70);
            comando.Parameters["@q2"].Value = txtPaterno.Text.ToUpper();

            comando.Parameters.Add("@q3", OdbcType.VarChar, 70);
            comando.Parameters["@q3"].Value = txtMaterno.Text.ToUpper();

            //sexo
            if (rdbM.Checked)//male
            {
                comando.Parameters.Add("@q4", OdbcType.VarChar, 1);
                comando.Parameters["@q4"].Value = "M";
            }
            else
            {
                comando.Parameters.Add("@q4", OdbcType.VarChar, 1);
                comando.Parameters["@q4"].Value = "F";
            }
            //fecha de nacimiento
            comando.Parameters.Add("@q5", OdbcType.Date);
            comando.Parameters["@q5"].Value = ddlYear1.SelectedValue + "/" +
                                              ddlMonth1.SelectedValue + "/" +
                                              ddlDia1.SelectedValue;
            //continente
            //comando.Parameters.Add("@q6", OdbcType.Int).Value = ddlContinente.SelectedValue;
            //ciudad
            comando.Parameters.Add("@q7", OdbcType.VarChar);
            comando.Parameters["@q7"].Value = txtCiudad.Text.ToUpper();

            //adress
            comando.Parameters.Add("@q8", OdbcType.VarChar);
            comando.Parameters["@q8"].Value = txtDireccion.Text.ToUpper();

            //codigo postal
            comando.Parameters.Add("@q9", OdbcType.VarChar);
            comando.Parameters["@q9"].Value = txtcp.Text;
            //telefono
            comando.Parameters.Add("@q10", OdbcType.VarChar);
            comando.Parameters["@q10"].Value = txtTelefono.Text;
            //movil
            comando.Parameters.Add("@q11", OdbcType.VarChar);
            comando.Parameters["@q11"].Value = txtMovil.Text;
            //mail
            comando.Parameters.Add("@q12", OdbcType.VarChar);
            comando.Parameters["@q12"].Value = txtMail.Text;
            //numero del imss, si existiese
            if (txtIMSS.Text != "")
            {
                comando.Parameters.Add("@q13", OdbcType.VarChar);
                comando.Parameters["@q13"].Value = txtIMSS.Text;
            }
            else
            {
                comando.Parameters.Add("@q13", OdbcType.VarChar);
                comando.Parameters["@q13"].Value = "NO NUMBER";
            }

            //numero del rfc si existiese
            if (txtRFC.Text != "")
            {
                comando.Parameters.Add("@q14", OdbcType.VarChar);
                comando.Parameters["@q14"].Value = txtRFC.Text.ToUpper();
            }
            else
            {
                comando.Parameters.Add("@q14", OdbcType.VarChar);
                comando.Parameters["@q14"].Value = "NO NUMBER";
            }
            //pasaporte
            if (rdbPassportY.Checked)//si hay pasaporte
            {
                if (txtPasaporte.Text == "")
                {
                    lblError.Text = "Passport REQUIRED";
                    txtPasaporte.Focus();
                    return;
                }
                else
                {
                    comando.Parameters.Add("@q15", OdbcType.Int);
                    comando.Parameters["@q15"].Value = 1;
                    comando.Parameters.Add("@q16", OdbcType.VarChar);
                    comando.Parameters["@q16"].Value = txtPasaporte.Text.ToUpper();
                }
            }
            else
            {
                comando.Parameters.Add("@q15", OdbcType.Int);
                comando.Parameters["@q15"].Value = 0;
                comando.Parameters.Add("@q16", OdbcType.VarChar);
                comando.Parameters["@q16"].Value = "NO NUMBER";
            }
            //visa booleano y expiracion
            if (rdbVisaY.Checked)
            {
                comando.Parameters.Add("@q17", OdbcType.Int);
                comando.Parameters["@q17"].Value = 1;
                comando.Parameters.Add("@q18", OdbcType.Date);
                comando.Parameters["@q18"].Value = ddlYear2.SelectedValue + "/" +
                                                   ddlMonth2.SelectedIndex + "/" +
                                                   ddlDia2.SelectedIndex;
            }
            else
            {
                comando.Parameters.Add("@q17", OdbcType.Int);
                comando.Parameters["@q17"].Value = 0;
                comando.Parameters.Add("@q18", OdbcType.Int);
                comando.Parameters["@q18"].Value = null;
            }
            //position applied for
            comando.Parameters.Add("@q19", OdbcType.VarChar);
            comando.Parameters["@q19"].Value = txtPosition.Text.ToUpper();
            comando.Parameters.Add("@q20", OdbcType.Date);
            comando.Parameters["@q20"].Value = ddlYear3.SelectedValue + "/" +
                                                                     ddlMonth3.SelectedIndex + "/" +
                                                                     ddlDia3.SelectedIndex;
            //DONDE NOS ENCONTRO@
            comando.Parameters.Add("@q21", OdbcType.Int);
            comando.Parameters["@q21"].Value = ddlAcercaDe.SelectedValue;
            //PREGUNTA 1
            if (rdb1.Checked)
            {
                comando.Parameters.Add("@q22", OdbcType.Int);
                comando.Parameters["@q22"].Value = 1;
            }
            else
            {
                comando.Parameters.Add("@q22", OdbcType.Int);
                comando.Parameters["@q22"].Value = 0;
            }
            //PREGUNTA 2
            if (rdb11.Checked)
            {
                comando.Parameters.Add("@q23", OdbcType.Int);
                comando.Parameters["@q23"].Value = 1;
            }
            else
            {
                comando.Parameters.Add("@q23", OdbcType.Int);
                comando.Parameters["@q23"].Value = 0;
            }
            comando.Parameters.Add("@q24", OdbcType.VarChar);
            comando.Parameters["@q24"].Value = txtLufthansa.Text.ToUpper();
            comando.Parameters.Add("@q25", OdbcType.VarChar);
            comando.Parameters["@q25"].Value = txtCuando.Text.ToUpper();
            comando.Parameters.Add("@q26", OdbcType.Int);
            comando.Parameters["@q26"].Value = ddlAvailable.SelectedValue;
            comando.Parameters.Add("@q27", OdbcType.VarChar);
            comando.Parameters["@q27"].Value = "*****";

            OdbcConnection conexion = new OdbcConnection(connection);

            comando.Connection = conexion;
            comando.CommandText = consultaUpdate;//consulta que acabo de postear
            conexion.Open();
            if (comando.ExecuteNonQuery() == 1)
...
es lo que te digo, he revisado todo el código y no me manda problemas, las cajas de texto las tengo llenas, bueno, las que pido como obligatorias, pero me sigue mandando ese error por cada uno de los campo.
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
  #6 (permalink)  
Antiguo 25/04/2007, 16:19
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 18 años, 10 meses
Puntos: 50
Re: mySQL con conexión DNS

como había estado manejando el MySqlClient no me había dado broncas, todo paso con lo del ODBC, y desconozco que sea.
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
  #7 (permalink)  
Antiguo 25/04/2007, 16:57
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: mySQL con conexión DNS

Revisando como se deben usar parámetros con ODBC, me parece que tienes que usar "?" en la consulta para especificar los parámetros.

Disculpa por no haberme dado cuenta antes y extender de manera innecesaria este hilo -cada día se aprende algo

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #8 (permalink)  
Antiguo 26/04/2007, 09:17
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 18 años, 10 meses
Puntos: 50
Re: mySQL con conexión DNS

No hay cuidado, suele pasar, mira, cree otra aplicación y en un botón solo coloque el siguiente código

Código:
        string cadena = "Driver={MySQL ODBC 3.51 Driver};Server=xxx.xxx.xxx.xxx;Port=3306;Database=ABC;User=ABC123;Password=XYZABC;Option=3;";
        string consulta = "insert into aboutus (concept) values (@concept)";
        OdbcConnection conexion = new OdbcConnection(cadena);
        try
        {
            OdbcCommand comando = new OdbcCommand(consulta, conexion);
            comando.Parameters.Add("?concept", OdbcType.VarChar);
            comando.Parameters["?concept"].Value = "pasa maldito param";
            conexion.Open();
            comando.ExecuteNonQuery();
        }
        catch (OdbcException ex)
        {
            Label1.Text = ex.Message;
        }
        finally
        {
            if (conexion != null)
                conexion.Close();
        }
pero sigue mandando el mismo error

Cita:
Iniciado por error
ERROR [HY000] [MySQL][ODBC 3.51 Driver][mysqld-4.0.21-nt]Column 'concept' cannot be null

siendo que he cambiado los @ por ? y viceversa, también probe una consulta SELECT sin parámetros y esa paso sin pena, entonces todo va enfocado a los parámetros, pero no descubro que es, ya busque en google pero nada, solo bugs referidos al error que no me ayudan en mucho.
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
  #9 (permalink)  
Antiguo 26/04/2007, 10:35
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: mySQL con conexión DNS

No, debería ser algo como esto (fíjate el valor de consulta):
Código:
string cadena = "Driver={MySQL ODBC 3.51 Driver};Server=xxx.xxx.xxx.xxx;Port=3306;Database=ABC;User=ABC123;Password=XYZABC;Option=3;";

string consulta = "insert into aboutus (concept) values (?)";
OdbcConnection conexion = new OdbcConnection(cadena);
try
{
    OdbcCommand comando = new OdbcCommand(consulta, conexion);
    comando.Parameters.Add("@concept", OdbcType.VarChar);
    comando.Parameters["@concept"].Value = "pasa maldito param";
    conexion.Open();
    comando.ExecuteNonQuery();
}
catch (OdbcException ex)
{
    Label1.Text = ex.Message;
}
finally
{
    if (conexion != null)
        conexion.Close();
}
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #10 (permalink)  
Antiguo 26/04/2007, 11:59
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 18 años, 10 meses
Puntos: 50
Re: mySQL con conexión DNS

XKNOWN para presidente de Perú gracias compa, ha quedado perfecto, y revisando la liga que tenias, yo decía "¿porqué carajos usan todo esto '{CALL CustOrderHist (?)}'?" hasta que leí bien y era un store procedure, "que estúpido soy" y pues con esa ayuda que me colocaste ha quedado el problema resuelto, ahora tengo que colocar el orden correcto de los parámetros sino se van a guardar donde no deben, gracias por la ayuda.

en mi caso, tendría que quedar así:

Código:
"INSERT INTO employee (sName, sLastName, sLastName2, gender, dBirth, sCity, sAdress, 
sPC, sphone, sMobilePhone, sMail, sIMSSNumber, sRFCNumber, bPassport, sPassport, bVisa, 
dExpiration, sPosition, dPosition, idAbout, bFilled, bGroup, sWorkedIn, sWhen, idAvailability, 
sIdentification) VALUES (0,?,?,?,?,?," +
    "?,?,?,?,?,?,?," +
    "?,?,?,?,?,?," +
    "?,?,?,?,?," +
    "?,?, ?);"; 
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:34.