Строка EntityConnection для SqlServerCe - PullRequest
2 голосов
/ 24 мая 2011

Как мне создать строку EntityConnection для базы данных SqlServerCe ?

Я попытался выполнить пример MSDN на Как: создать соединение EntityConnectionСтрока

const string PROVIDER = "System.Data.SqlClient";

static string BuildEntityConnString(string dbFileName, string password) {
  // dbFileName is filename without the extension
  SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
  sqlBuilder.DataSource = PROVIDER;
  sqlBuilder.InitialCatalog = dbFileName;
  sqlBuilder.IntegratedSecurity = true;
  sqlBuilder.Password = password;
  string providerString = sqlBuilder.ToString();
  EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
  entityBuilder.Provider = PROVIDER;
  entityBuilder.ProviderConnectionString = providerString 
  entityBuilder.Metadata = string.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", dbFileName);
  string connString = entityBuilder.ToString();
  using (EntityConnection con = new EntityConnection(connString)) {
    con.Open();
    Console.WriteLine("{0} Entity String created.", dbFileName);
    con.Close();
  }
  return connString;
}

Однако, но выдает ошибку:

A network-related or instance-specific error occurred while establishing a 
connection to SQL Server. The server was not found or was not accessible. Verify 
that the instance name is correct and that SQL Server is configured to allow 
remote connections. (provider: Named Pipes Provider, error: 40 - Could not open 
a connection to SQL Server)

После некоторого поиска я смог найти информацию о том, что Пример MSDN возвращает SqlClient .

Однако я не смог выяснить, как вернуть Sql CE-соединение.

Я попытался указать EntityConnection строку подключения SQL CE, которая позволяет мнечтобы открыть базу данных .SWF и прочитать ее условно:

const string PROVIDER = "Microsoft.SqlServerCe.Client.3.5";

static string BuildEntityConnString(string dbFileName, string password) {
  EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
  entityBuilder.Provider = PROVIDER;
  entityBuilder.ProviderConnectionString = myCeConnectionString;
  entityBuilder.Metadata = string.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", dbFileName);
  string connString = entityBuilder.ToString();
  using (EntityConnection con = new EntityConnection(connString)) {
    con.Open();
    Console.WriteLine("{0} Entity String created.", dbFileName);
    con.Close();
  }
  return connString;
}

Эта версия вызывает другую ошибку:

Unable to find the requested .Net Framework Data Provider.
It may not be installed.

Что я могу делать не так?

Я нашел это связанное Исправление SQL Server , но это исправление должно быть чем-то, что я могу установить в своем коде, чтобы мой проект работал на компьютерах наших клиентов в других местах без сетевых администраторов.

1 Ответ

1 голос
/ 24 мая 2011

Вам необходимо зарегистрировать поставщика CE в вашем app.config.Кроме того, AFAIK, «Microsoft.SqlServerCe.Client.3.5» - это имя предварительной версии поставщика;RTM - это «System.Data.SqlServerCe.3.5».

Попробуйте изменить PROVIDER для соответствия второй строке и добавьте это в app.config:

  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.3.5" />
      <add
        name="Microsoft SQL Server Compact Data Provider"
        invariant="System.Data.SqlServerCe.3.5"
        description=".NET Framework Data Provider for Microsoft SQL Server Compact"
        type="System.Data.SqlServerCe.SqlCeProviderFactory,
          System.Data.SqlServerCe,
          Version=3.5.0.0,
          Culture=neutral,
          PublicKeyToken=89845dcd8080cc91"
      />
    </DbProviderFactories>
  </system.data>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...