【问题标题】:C# Winform SQL Server Connection StringC# Winform SQL Server 连接字符串
【发布时间】:2019-09-29 21:44:50
【问题描述】:

使用 SQL Server 处理 WinForm 项目。

目前我的MusicPlayerDB.mdfCopy to Output Directory 属性设置为Copy if newer

运行InsertIntoDB 后,我关闭 Winform 并继续在服务器资源管理器中检查表。但似乎我的表没有更新。但是如果我去检查Bin/Debug和检查MusicPlayerDB.mdf,数据就在那里。

解决此问题的最佳方法是什么?我见过其他 cmets 说要使用 .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

【问题讨论】:

  • 有没有办法让它每次都转到一个位置?我有点恼火数据不是持久的。
  • 操作,抱歉将我的评论移到下面的完整答案中。
  • 和往常一样 - 不要使用addwithvalue
  • 哦!谢谢,不知道。

标签: c# sql-server winforms


【解决方案1】:

这是预期的工作方式。桌面应用程序中的 |DataDirectory| 指向可执行文件的运行位置。这意味着 bin\debugbin\release(工作文件夹),当您在 VS 内运行应用程序时,当您在 VS 外运行应用程序时,安装文件夹。

这种安排允许您将空 MDF 保留在项目文件夹中,而工作副本保留在输出文件夹中。当您需要更改数据库架构中的某些内容时,您可以使用服务器资源管理器更改项目文件夹中的副本。因此,将在下一个 VS 会话开始时将文件的新副本复制到输出文件夹中。当您需要分发您的应用程序时,您将 MDF 文件分发到您的项目文件夹中。

当然,如果您需要检查数据库的工作副本中发生了什么,那么您可以在服务器资源管理器中创建一个新连接,该连接指向工作文件夹中的 MDF 文件。

如果您需要更多控制,则可以更改替换字符串 |DataDirectory| 的位置点。例如,请参阅this Question 和我的答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    相关资源
    最近更新 更多