Изменить строку подключения после создания установочного файла в C # .NET

Я создаю приложения формы C # windows, результаты работы можно суммировать, когда пользователи заполняют некоторую форму и данные сохраняются в базе данных Access. Теперь проблема, с которой я сталкиваюсь, заключается в том, что я должен передать это как установочный файл кому-то. Я думаю, что код, установленный на других компьютерах и выполненный, выдаст ошибки из-за строки подключения Access db, поскольку он не будет соответствовать этому компьютеру. Я знаю, что при распространении проектов я могу поместить строку подключения в app.config, и каждый пользователь может изменить ее в соответствии со своей машиной. Но так как я даю установочный файл, как решить эту проблему.

 Mr.GT14 июн. 2012 г., 09:31
Это хоть один ... Я пробовал это раньше, но не смог сделать это попробуйтеthis custom dialogue creator может быть, отправной точкой. Удачи и, пожалуйста, отправьте ответ, как только вы его получите.
 Sunny14 июн. 2012 г., 09:37
Можете ли вы показать конфигурационный файл приложения с настройкой в меню «Все программы»?

Ответы на вопрос(4)


(1) в вашем файле app.config поместите заполнитель в строку подключения. строка подключения будет содержать путь к файлу доступа к базе данных. замените путь специальной строкой.

  <connectionStrings>
    <!-- original connection string , change it to the below line -->
    <!--  <add name="test" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;   Data   Source=d:\test\test.mdb "/> -->
    <add name="test" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;   Data   Source=##path##\test.mdb "/>
  </connectionStrings>

(2) при запуске приложения используйте Directory.GetCurrentDirectory, чтобы получить путь к приложению. перед созданием соединения замените путь ## ## фактическим путем на клиентском компьютере.

static void test()
{
    string s = ConfigurationManager.ConnectionStrings["test"].ConnectionString;
    s.Replace("##path##", Directory.GetCurrentDirectory());
    OleDbConnection conn = new OleDbConnection(s);
}
 Imran14 июн. 2012 г., 09:37
Можете ли вы объяснить это с помощью небольшого кода? Заранее спасибо!
 14 июн. 2012 г., 10:12
Я вставил код, он работает хорошо. Но я думаю, что ответ Стива более гибкий. Вы можете попробовать это, как сказал Стив.

Предположим, вы развернули свой app.config с этой строкой соединения

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\yourFile.accdb;"

В приложении WinForms|DataDirectory| Ярлык представляет рабочую папку вашего приложения, но вы можете изменить его во время выполнения, если он указывает на использование этого кода.

// appdomain setup information
AppDomain currentDomain = AppDomain.CurrentDomain;
//Create or update a value pair for the appdomain
currentDomain.SetData("DataDirectory", "Your user choosen path");

Это избавляет от необходимости жестко кодировать полный путь, который, как вы обнаружили, приводит к нескольким проблемам, которые необходимо решить во время установки. Конечно, ваша установка должна доставить вашу базу данных по выбранному вами пути.

 06 июн. 2013 г., 13:21
Я присоединяю БД только путем присоединения БД. Но если на моей машине экземпляр - ./SQLExpress, а на других он иногда может отличаться в зависимости от имени компьютера, например, steve / SQLExpress или любого другого. В этом случае полностью зависит от имени экземпляра [имя сервера в строке подключения], что нам делать?
 06 июн. 2013 г., 13:05
но что, когда у нас есть SQL-сервер? Он содержит имя экземпляра в соответствии с именем компьютера.
 06 июн. 2013 г., 13:15
Если вы распространяете файл MDF самостоятельно, попробуйте использовать свойство AttachDbFileName какexplained here, но если у вас уже установлена база данных, вы можете попробовать выполнить пользовательскую процедуру установки, которая запрашивает хост источника данных. С другой стороны, вы можете добавить в программу опцию конфигурации, которая после установки запрашивает эту информацию у вашего пользователя, и перенастроить строку подключения.
 06 июн. 2013 г., 13:28
Если ваше приложение автономно без обмена данными (я имею в виду, что база данных используется только вашим приложением на локальном компьютере), вы можете попробоватьdeploy a LocalDB LocalDB - это версия Sql Express 2012, для которой не требуется экземпляр полного обслуживания и более простой шаблон установки.blogs.msdn.com/b/sqlexpress/archive/2011/07/12/…

Вы можете построитьConnectionString во время выполненияSqlConnectionStringBuilder

// Create a new SqlConnectionStringBuilder and
    // initialize it with a few name/value pairs.
    SqlConnectionStringBuilder builder =
        new SqlConnectionStringBuilder(GetConnectionString());

    // The input connection string used the 
    // Server key, but the new connection string uses
    // the well-known Data Source key instead.
    Console.WriteLine(builder.ConnectionString);

    // Pass the SqlConnectionStringBuilder an existing 
    // connection string, and you can retrieve and
    // modify any of the elements.
    builder.ConnectionString = "server=(local);user id=ab;" +
        "password= a!Pass113;initial catalog=AdventureWorks";

    // Now that the connection string has been parsed,
    // you can work with individual items.
    Console.WriteLine(builder.Password);
    builder.Password = "[email protected]";
    builder.AsynchronousProcessing = true;

    // You can refer to connection keys using strings, 
    // as well. When you use this technique (the default
    // Item property in Visual Basic, or the indexer in C#),
    // you can specify any synonym for the connection string key
    // name.
    builder["Server"] = ".";
    builder["Connect Timeout"] = 1000;
    builder["Trusted_Connection"] = true;
    Console.WriteLine(builder.ConnectionString);

    Console.WriteLine("Press Enter to finish.");
    Console.ReadLine();

Edit: Вы можете использовать это:Поиск SQL-серверов в сети

 14 июн. 2012 г., 09:44
БД MS Access являются либо ODBC / OLEDB. Тогда вышеописанное будет работать, просто измените строку подключения.
 14 июн. 2012 г., 09:41
Это база данных Access, к которой они подключаются, а не SQL Server.

пользователь (машина \ пользователь) должен быть добавлен в вашу базу данных, чтобы иметь доступ.

Ваш ответ на вопрос