none
Conectando a SQL Server Express RRS feed

  • Pregunta

  • Hola, tengo un proyecto que hemos empezado añadiendo la conexión directamente al archivo .mdf (en VS 2010, le dimos a agregar nueva BD y ya está) ahora nos encontramos con el problema que queremos acceder desde varios ordenadores a la misma base de datos, por lo que desde la SQL Server Management Console hemos agregado esa base de datos, y al generar el contexto hemos cambiado del anterior codigo:

    ContextEntities db = new ContextEntities();

    a:

    ContextEntities db = new ContextEntities("Server=PC\\SQLEXPRESS;Database=gestion;Trusted_Connection=True");

    Sin embargo nos salta el error: "Keyword not supported: server" :S

    Alguien sabe como cambiar este tipo de conexión?

    O si hay alguna otra forma para que se pueda compartir la conexión a la base de datos desde varios equipos...


    Saludos, Juan Baixauli
    miércoles, 22 de septiembre de 2010 18:26

Respuestas

  • hola,

    Revisa Este en la ya resolvio ese problema 

    http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/4643d248-fb23-4142-913b-45d803cc48e8

     

    un saludo..

     

     


    Enmanuel Grullard@Developer ASP.NET
    • Propuesto como respuesta Enmanuel Grullard miércoles, 22 de septiembre de 2010 20:05
    • Votado como útil xauli jueves, 23 de septiembre de 2010 18:15
    • Marcado como respuesta xauli jueves, 23 de septiembre de 2010 18:31
    miércoles, 22 de septiembre de 2010 20:05
  • El problema que tienes es que confundes las cadenas de conexion de la base de datos y la del entityframework

    una no tiene nada que ver con la otra.

    La cadena de conexion de la base de datos SQL Server es la normal, pero la del entityframework es distinta ya que por una lado hace refencia a la ubicacion de los ficheros xml que describen el entitycontext y el contextmanager.

    Los ficheros son el csdl el ssdl y el msl que se generan al compilar

     

    A mi tambien me pasaba al principio.

     

    Un saludo

    • Marcado como respuesta xauli jueves, 23 de septiembre de 2010 18:31
    jueves, 23 de septiembre de 2010 11:27
  • Emmanuel, probé tu solución, con eso genero el siguiente código:

    string providerName = "System.Data.SqlClient";
    string serverName = "PC\\SQLEXPRESS";
    string databaseName = "gestion";
    
    SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
    sqlBuilder.DataSource = serverName;
    sqlBuilder.InitialCatalog = databaseName;
    sqlBuilder.IntegratedSecurity = true;
    
    string providerString = sqlBuilder.ToString();
    
    EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
    
    entityBuilder.Provider = providerName;
    entityBuilder.ProviderConnectionString = providerString;
    entityBuilder.Metada = @"res://*/GesModa.csdl|
                       res://*/GesModa.ssdl|
                       res://*/GesModa.msl";
    
    ContextEntities db = new ContextEntities(entityBuilder.ToString());
    
    

    Con esto consigo que el programa compile y lance la ejecución pero al hacer la primera consulta a la base de datos, me suelta una excepción con el siguiente contenido:

    "There is already an open DataReader associated with this Command wich must be closed first."

    El caso está en que si en lugar de conectar así hago simplemente:

    ContextEntities db = new ContextEntities();

    para conectarme al fichero mdf que hay en el proyecto como originalmente hice, se conecta bien y hace bien las consultas :S

    Finalmente lo encontré ;)

    Bastaba con añadir:

    sqlBuilder.MultipleActiveResultSets = true;
    
    Muchas gracias a los dos!!


    Saludos, Juan Baixauli
    • Marcado como respuesta xauli jueves, 23 de septiembre de 2010 18:31
    jueves, 23 de septiembre de 2010 18:31

Todas las respuestas

  • Bien, encontré el motivo de ese error, la cadena de conexión estaba terriblemente mal, la puse como corresponde:

     

     

    string connect = "Provider=System.Data.SqlClient; Metadata=res:\\*\; Provider Connection String='Server=PC\\SQLEXPRESS;Database=gestion;Trusted_Connection=True';";
    
    ContextEntities db = new ContextEntities(connect);
    
    
    

    Sin embargo me lanza la siguiente excepción:

    There is alredy an open DataReader associated with this Command which must be closed first

     

    Lo raro es que este error cuando conectaba directamente sobre el fichero mdf no me saltaba :S

    ¿Existe alguna forma más sencilla de conectar varios equipos a la misma base de datos?


    Saludos, Juan Baixauli
    miércoles, 22 de septiembre de 2010 19:21
  • hola,

    Revisa Este en la ya resolvio ese problema 

    http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/4643d248-fb23-4142-913b-45d803cc48e8

     

    un saludo..

     

     


    Enmanuel Grullard@Developer ASP.NET
    • Propuesto como respuesta Enmanuel Grullard miércoles, 22 de septiembre de 2010 20:05
    • Votado como útil xauli jueves, 23 de septiembre de 2010 18:15
    • Marcado como respuesta xauli jueves, 23 de septiembre de 2010 18:31
    miércoles, 22 de septiembre de 2010 20:05
  • El problema que tienes es que confundes las cadenas de conexion de la base de datos y la del entityframework

    una no tiene nada que ver con la otra.

    La cadena de conexion de la base de datos SQL Server es la normal, pero la del entityframework es distinta ya que por una lado hace refencia a la ubicacion de los ficheros xml que describen el entitycontext y el contextmanager.

    Los ficheros son el csdl el ssdl y el msl que se generan al compilar

     

    A mi tambien me pasaba al principio.

     

    Un saludo

    • Marcado como respuesta xauli jueves, 23 de septiembre de 2010 18:31
    jueves, 23 de septiembre de 2010 11:27
  • Emmanuel, probé tu solución, con eso genero el siguiente código:

    string providerName = "System.Data.SqlClient";
    string serverName = "PC\\SQLEXPRESS";
    string databaseName = "gestion";
    
    SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
    sqlBuilder.DataSource = serverName;
    sqlBuilder.InitialCatalog = databaseName;
    sqlBuilder.IntegratedSecurity = true;
    
    string providerString = sqlBuilder.ToString();
    
    EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
    
    entityBuilder.Provider = providerName;
    entityBuilder.ProviderConnectionString = providerString;
    entityBuilder.Metada = @"res://*/GesModa.csdl|
                       res://*/GesModa.ssdl|
                       res://*/GesModa.msl";
    
    ContextEntities db = new ContextEntities(entityBuilder.ToString());
    
    

    Con esto consigo que el programa compile y lance la ejecución pero al hacer la primera consulta a la base de datos, me suelta una excepción con el siguiente contenido:

    "There is already an open DataReader associated with this Command wich must be closed first."

    El caso está en que si en lugar de conectar así hago simplemente:

    ContextEntities db = new ContextEntities();

    para conectarme al fichero mdf que hay en el proyecto como originalmente hice, se conecta bien y hace bien las consultas :S

    Finalmente lo encontré ;)

    Bastaba con añadir:

    sqlBuilder.MultipleActiveResultSets = true;
    
    Muchas gracias a los dos!!


    Saludos, Juan Baixauli
    • Marcado como respuesta xauli jueves, 23 de septiembre de 2010 18:31
    jueves, 23 de septiembre de 2010 18:31
  • hola ,

    Que bueno que pudiste Resolver bueno ya sabes donde acudir cuando te algun incoveniente suerte .

     

    un saludo.


    Enmanuel Grullard@Developer ASP.NET
    viernes, 24 de septiembre de 2010 14:44