none
Formato de cadena de conexión. SQL Server CE RRS feed

  • Pregunta

  • Hola a todos.

    Estoy preparando un proyecto de instalación, de una aplicación Windows Forms con EF 4.0 y SQL Server CE 3.5

    El caso es que cuando instalo, no se cómo hacer que la aplicación Windows Forms encuentre correctamente la base de datos CE. Estoy instalando sobre un Windows 7 de test, y la estructura que tengo de directorios es:

    Fichero exe: app path por defecto

    Fichero sdf (base de datos CE): app path\Database

    la cadena de conexión que estoy usando en ese caso es:

    <add name="DataContext" connectionString="metadata=res://*/Model.MssDtDataModel.csdl|res://*/Model.MssDtDataModel.ssdl|res://*/Model.MssDtDataModel.msl;provider=System.Data.SqlServerCe.3.5;provider connection string=&quot;Data Source=.\Database\MssDt.sdf&quot;" providerName="System.Data.EntityClient"/>

    El error que me da es que no tiene acceso al fichero de base de datos. Y la verdad no entiendo muy bien porqué...si pongo la ruta absoluta, si que encuentra el fichero... pero eso es como poco... ¿una guarrería?

    Alguna idea?

    Mil gracias!

     

    martes, 15 de febrero de 2011 13:09

Respuestas

  • hola

    ups que connectionstring tan raro, la verdad nucna habia bisto algo asi

    Connection strings for SQL Server Compact Edition

    alli no lo menciona pero tambien podrias suar

    "Data Source = |DataDirectory|\Mydb.sdf"

    en el connection string, solo eso

    usando el DataDirectory indicas el directorio local junto a tu aplicacion, alli es donde deberia estar el sdf

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 17 de febrero de 2011 2:33
  • Hola Leandro,

    Efectivamente, estuve revisando esa página, y me dio una idea para poder acceder correctamente a la base de datos.

    Lo primero es cambiar la cadena de conexión utilizando la siguiente sintaxix:

    <add name="DataContext" connectionString="metadata=res://*/Model.MssDtDataModel.csdl|res://*/Model.MssDtDataModel.ssdl|res://*/Model.MssDtDataModel.msl;provider=System.Data.SqlServerCe.3.5;provider connection string=&quot;Data Source=|DataDirectory|\MssDt.sdf&quot;" providerName="System.Data.EntityClient"/>
    

    Como verás, utilizo el DataDirectory.

    Ahora, desde la aplicación, modifico la variable DataDirectory del dominio de la apicación:

    Dim dataTransferFullPath As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
    dataTransferFullPath = dataTransferFullPath.Replace("file:\", "")
    AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Path.Combine(dataTransferFullPath, My.Settings.DataDirectoryName))
    Debug.Print("DataDirectory: " & AppDomain.CurrentDomain.GetData("DataDirectory"))
    

    Y con esto, problema resuelto!!

    Un saludo y gracias,
    Antonio.

    viernes, 18 de febrero de 2011 11:51

Todas las respuestas

  • hola

    ups que connectionstring tan raro, la verdad nucna habia bisto algo asi

    Connection strings for SQL Server Compact Edition

    alli no lo menciona pero tambien podrias suar

    "Data Source = |DataDirectory|\Mydb.sdf"

    en el connection string, solo eso

    usando el DataDirectory indicas el directorio local junto a tu aplicacion, alli es donde deberia estar el sdf

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 17 de febrero de 2011 2:33
  • Hola Leandro,

    Efectivamente, estuve revisando esa página, y me dio una idea para poder acceder correctamente a la base de datos.

    Lo primero es cambiar la cadena de conexión utilizando la siguiente sintaxix:

    <add name="DataContext" connectionString="metadata=res://*/Model.MssDtDataModel.csdl|res://*/Model.MssDtDataModel.ssdl|res://*/Model.MssDtDataModel.msl;provider=System.Data.SqlServerCe.3.5;provider connection string=&quot;Data Source=|DataDirectory|\MssDt.sdf&quot;" providerName="System.Data.EntityClient"/>
    

    Como verás, utilizo el DataDirectory.

    Ahora, desde la aplicación, modifico la variable DataDirectory del dominio de la apicación:

    Dim dataTransferFullPath As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
    dataTransferFullPath = dataTransferFullPath.Replace("file:\", "")
    AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Path.Combine(dataTransferFullPath, My.Settings.DataDirectoryName))
    Debug.Print("DataDirectory: " & AppDomain.CurrentDomain.GetData("DataDirectory"))
    

    Y con esto, problema resuelto!!

    Un saludo y gracias,
    Antonio.

    viernes, 18 de febrero de 2011 11:51