• Viernes 3 de Mayo de 2024, 07:45

Autor Tema:  Conectar a una BD interna c# - no hay forma...  (Leído 5500 veces)

nax

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Conectar a una BD interna c# - no hay forma...
« en: Sábado 11 de Diciembre de 2010, 01:44 »
0
Bueno, no hace mucho que empecé con c# y mi mayor rompe cabezas son las conexiones a BD..

Estoy usando una BD creada desde el propio visual studio 2010 llamada premium.sdf (se ve en el explorador de servidores en "conexiones de datos")

De esa BD uso un par de dataset sin problemas...

MI problema viene cuando intento hacer una conexión por medio de código... ya que siempre me la rechaza... he probado muchisimas formas y nada...
todas fallan en el conexion.Open(); y el error dice que no puede encontrar la bd.

El actual código que estoy probando es:

Código: C#
  1.             string miCadenaconexion = ConfigurationManager.ConnectionStrings[1].ConnectionString;
  2.             MessageBox.Show(ConfigurationManager.ConnectionStrings[1].ConnectionString);
  3.             SqlConnection sqlconnection;
  4.             using (sqlconnection = new SqlConnection(miCadenaconexion))
  5.             {
  6.                 sqlconnection.Open();
  7.  
  8.                 if (sqlconnection.State == System.Data.ConnectionState.Open)
  9.                 {
  10.                     MessageBox.Show("abieta");
  11.                 }
  12.                 sqlconnection.Close();
  13.             }
  14.  
  15.             if (sqlconnection.State != System.Data.ConnectionState.Open)
  16.             {
  17.                 MessageBox.Show("closeed");
  18.             }
  19.  

el messagebox muestra: Data Source=|DataDirectory|premium.sdf

era básicamente para ver que estaba usando la Connectionstring correcta...

el app.config es:

Código: XML
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.     <configSections>
  4.     </configSections>
  5.     <connectionStrings>
  6.         <add name="WindowsFormsApplication1.Properties.Settings.Database1ConnectionString"
  7.            connectionString="Data Source=|DataDirectory|premium.sdf"
  8.            providerName="Microsoft.SqlServerCe.Client.3.5" />
  9.     </connectionStrings>
  10. </configuration>
  11.  
Nota: no me digais que tengo que usar ConnectionString[0] porque esa es un mdf o mdb que no se ni de donde sale :S

El error que me da es este:

Citar
Error relacionado con la red o específico de la instancia mientras se establecía una conexión con el servidor SQL Server. No se encontró el servidor o éste no estaba accesible. Compruebe que el nombre de la instancia es correcto y que SQL Server está configurado para admitir conexiones remotas. (provider: SQL Network Interfaces, error: 26 - Error al buscar el servidor o instancia especificado)

en sqlconnection.Open();

a ver si me podeis orientar un poco ya que ando muy perdido a estas alturas!

desde ya miles de gracias

Altrox

  • Nuevo Miembro
  • *
  • Mensajes: 17
  • Nacionalidad: es
    • Ver Perfil
Re: Conectar a una BD interna c# - no hay forma...
« Respuesta #1 en: Sábado 11 de Diciembre de 2010, 05:04 »
0
Buenas,
para conectar con sqlserver personalmente utilizo oledbconection, te dejo un ejemplo de cómo lo hago.

Código: C#
  1.  
  2. string conex = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=db/base.sdf;";
  3. string[] conf = new string[2];
  4. OleDbConnection conn = new OleDbConnection(conex);
  5. conn.Open();
  6. string sql = "SELECT * FROM Configuracion";
  7. OleDbCommand ejecucion = new OleDbCommand(sql, conn);
  8. //Para Obtener Datos
  9. OleDbDataReader leer = ejecucion.ExecuteReader();
  10.  
  11.             while (leer.Read())
  12.             {
  13.                 conf[0] = leer["Campo1"].ToString();
  14.                 conf[1] = leer["Campo3"].ToString();
  15.             }
  16. // FIN Para Obtener Datos
  17.  
  18. // Para añadir, actualizar borrar datos
  19.  sql = "INSERT INTO Configuracion (campo1,campo2) VALUES ('valorCampo1','ValorCampo2')";
  20.  ejecucion.ExecuteNonQuery();          
  21. // FIN Para añadir, actualizar borrar datos
  22.             conn.Close();
  23.  
  24.  
Por último decir que, para insertar un valor de una variable(ya que estuve media hora dándome cabezazos como un tonto).
Código: C#
  1.  
  2. string v = "hola";
  3. string sql = "INSERT INTO Configuracion (campo1) VALUES ('" + v + "')";
  4.  
  5.  

Bueno espero que te sirva de algo.
Saludos!

nax

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Conectar a una BD interna c# - no hay forma...
« Respuesta #2 en: Sábado 11 de Diciembre de 2010, 15:13 »
0
Muchísimas gracias Altrox!! con oledb no tengo problema  :D

EDito:

En los selects funcioan perfectamente..

el insert me falla :(

Código: C#
  1.                     string conex = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=|DataDirectory|\premium.sdf;";
  2.                     string sql = "INSERT INTO usuario (usuario, pass) VALUES ('" + user + "', '" + pass + "')";
  3.                     OleDbConnection conn = new OleDbConnection(conex);
  4.                     conn.Open();
  5.                     OleDbCommand ejecucion = new OleDbCommand(sql, conn);
  6.  
  7.  
  8.                         ejecucion.ExecuteNonQuery();
  9.  
  10.                     conn.Close();
  11.  
  12.  

no da error, simplemente voy a mirar la bd desde el explorador y no aparecen los nuevos registros  :no:

Altrox

  • Nuevo Miembro
  • *
  • Mensajes: 17
  • Nacionalidad: es
    • Ver Perfil
Re: Conectar a una BD interna c# - no hay forma...
« Respuesta #3 en: Sábado 11 de Diciembre de 2010, 16:48 »
0
Que raro, bueno luego te dejo un pequeño ejemplo que tengo, que ahora no tengo tiempo, ok?
Saludos!

gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re: Conectar a una BD interna c# - no hay forma...
« Respuesta #4 en: Sábado 11 de Diciembre de 2010, 19:15 »
0
Pon un punto de interrupción.. donde empieza tu método.. y ejecuta paso a paso.. Obten la sentencia SQL, ejecutala en tu SQL MANAGENT o como se llame.. y ve si funca.. si no funca.. es problema de tu sentencia SQL , SI funca es problema de programación saludos.! :)
@gabio87

Altrox

  • Nuevo Miembro
  • *
  • Mensajes: 17
  • Nacionalidad: es
    • Ver Perfil
Re: Conectar a una BD interna c# - no hay forma...
« Respuesta #5 en: Sábado 11 de Diciembre de 2010, 19:36 »
0
Bueno pues, como he dicho antes aquí dejo un pequeño ejemplo muy básico de SqlServer Express 3.5 y OleDbCommand.
Lo puse un mi página como proyecto para quien quira que se lo pueda descargar(codigo fuente).
grupoalpha.info/web/?pagina=proyectos/Ejemplo_Ole_SQL

En las sentencias SQL se distinguen minúsculas y mayúsculas...

Saludos!

nax

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Conectar a una BD interna c# - no hay forma...
« Respuesta #6 en: Domingo 12 de Diciembre de 2010, 00:04 »
0
ok.. no hay error.. así que quizá yo estoy confudiendo conceptos...

pero a mi me interesa que esa .sdf guarde los datos y  no los pierda..

en ambos códigos (el tuyo y el mio) cuando paro la prueba los datos se evaporan, yo quiero almacenar esos datos dentro del programa...

acaso le estoy errando a algo?

Altrox

  • Nuevo Miembro
  • *
  • Mensajes: 17
  • Nacionalidad: es
    • Ver Perfil
Re: Conectar a una BD interna c# - no hay forma...
« Respuesta #7 en: Domingo 12 de Diciembre de 2010, 02:39 »
0
Al iniciar la depuracion los datos no se quedan grabados, pero si accedes al directorio debug o relase y ejecutas el exe, insertas, cierras y vuelves a ejecutar exe los datos que se insertaron anteriormente aparecen.
En el explorador de soluciones, en las propiedades del archivo sdf en la propiedad Copiar en el directorio de resultados dale de valor Copiar si es posterior. Igual tienes puesto Copiar siempre.
A mi los datos que inserto si que se quedan grabados en el sdf

nax

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Conectar a una BD interna c# - no hay forma...
« Respuesta #8 en: Domingo 12 de Diciembre de 2010, 21:18 »
0
Una vez mas millones de gracias Altrox.

Finalmente comprendí como funciona todo este tema tras probar y probar  :brickwall:

Los códigos funcionan estupendamente, y como bien dices, si ejecutas el .exe de /debug o /release la BD se guarda..
Lo que he descubieto es que si yo actualizo la bd en el explorador de servidores lo que hace es sincronizar la bd con el "original" lo que hace que se borren todos los datos que se insertaron anteriormente...

Enfin, caso cerrado y muchisimas gracias. :good: