C # Winform Строка подключения к SQL Server - PullRequest
0 голосов
/ 30 сентября 2019

Работа над проектом WinForm с использованием SQL Server.

В настоящее время у моего MusicPlayerDB.mdf свойство Copy to Output Directory установлено на Copy if newer.

После запуска моего InsertIntoDBЯ закрываю Winform и продолжаю проверять таблицу в Server Explorer. Но, похоже, моя таблица не была обновлена. Но если я пойду, чтобы проверить Bin/Debug и проверить MusicPlayerDB.mdf, данные там есть.

Как лучше всего это исправить? Я видел другие комментарии, в которых говорилось об использовании абсолютного пути .mdf (или что-то в том же духе), но я хотел бы избежать этого, если это возможно.

Вот моя строка соединения,

private const String CONNECTION_STRING = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\MusicPlayerDB.mdf;Integrated Security=True";

А вот мой код вставки:

private static void InsertIntoDB(List<string> userAccout) 
{
    String sqlQuery = "INSERT INTO dbo.UserAccount (UserName, UserPassword, PasswordQuestion, PasswordHint, PasswordKey) "
                      + "VALUES (@UserName, @UserPassword, @PasswordQuestion, @PasswordHint, @PasswordKey);";

    using(SqlConnection connection = new SqlConnection(CONNECTION_STRING)) 
    {
        connection.Open();          //open connection

        using(SqlCommand command = new SqlCommand(sqlQuery, connection)) 
        {     
            // set up command
            using(SqlTransaction trans = connection.BeginTransaction()) 
            {
                try 
                {
                    command.Connection = connection;
                    command.Transaction = trans;

                    command.Parameters.AddWithValue("@UserName", userAccout[0]);
                    command.Parameters.AddWithValue("@UserPassword", userAccout[1]);
                    command.Parameters.AddWithValue("@PasswordQuestion", userAccout[2]);
                    command.Parameters.AddWithValue("@PasswordHint", userAccout[3]);
                    command.Parameters.AddWithValue("@PasswordKey", Convert.ToInt32(userAccout[4]));

                    int r = command.ExecuteNonQuery();  //execute the command
                    trans.Commit();
                } 
                catch(Exception ex) 
                {
                    MessageBox.Show(ex.Message);    //couldn't execute command
                }
            }
        }
    }
} //end of InsertIntoDB

1 Ответ

1 голос
/ 30 сентября 2019

Вот как это должно работать. | DataDirectory | в настольном приложении указывает, куда запускается ваш исполняемый файл. Это означает bin \ debug или bin \ release (рабочие папки), когда вы запускаете приложение внутри VS, но папку установки, когда вы запускаете приложение вне VS.

Такое расположение позволяет вам хранить пустой MDF в папке проекта, в то время как рабочая копия остается в ваших папках вывода. Когда вам нужно что-то изменить в схеме вашей базы данных, вы используете Server Explorer, чтобы изменить копию в папке вашего проекта. Таким образом, новая копия файла будет скопирована в выходные папки в начале следующего сеанса VS. Когда вам нужно распространять ваше приложение, вы распространяете файл MDF в папке вашего проекта.

Конечно, если вам нужно проверить, что происходит в рабочей копии вашей базы данных, вы можете создать новое соединение в Server Explorer. это указывает на файл MDF в рабочих папках.

Если вам нужен больший контроль, вы можете изменить место подстановки | DataDirectory |точки. См., Например, этот вопрос и мой ответ там

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...