首页 > 解决方案 > SQL Server Express 数据库表未更新

问题描述

我想知道为什么当下面的方法成功执行时我的 SQL Server Express 数据库表没有得到更新?

public void addUser(User user)
{
    string query = "INSERT INTO users (username, password, firstname, lastname, isactive, accesslevel) VALUES (@usr,  @psw, @fname, @lname, @status, @access)";

    pSqlConn = new SqlConnection(pConnectingString);

    SqlCommand cmd = new SqlCommand(query, pSqlConn);

    SqlParameter pmtrUsername = new SqlParameter("@usr", user.Username);
    SqlParameter pmtrPassword = new SqlParameter("@psw", user.Password);
    SqlParameter pmtrFirstname = new SqlParameter("@fname", user.Firstname);
    SqlParameter pmtrLastname = new SqlParameter("@lname", user.Lastname);
    SqlParameter pmtrStatus = new SqlParameter("@status", user.IsActive);
    SqlParameter pmtrAccessLevel = new SqlParameter("@access", user.AccessLevel);

    cmd.Parameters.Add(pmtrFirstname);
    cmd.Parameters.Add(pmtrLastname);
    cmd.Parameters.Add(pmtrUsername);
    cmd.Parameters.Add(pmtrPassword);
    cmd.Parameters.Add(pmtrStatus);
    cmd.Parameters.Add(pmtrAccessLevel);

    pSqlConn.Open();
    cmd.ExecuteNonQuery();

    System.Windows.Forms.MessageBox.Show("Success!");
    pSqlConn.Close();
}

标签: c#sql-server

解决方案


整个User Instance 和 AttachDbFileName=方法是有缺陷的 - 充其量!在 Visual Studio 中运行您的应用程序时,它将围绕.mdf文件进行复制(从您的App_Data目录到输出目录 - 通常.\bin\debug是您的应用程序运行的位置),并且很可能,您的INSERT工作正常 - 但您只是看错了 . mdf文件到底!

如果您想坚持使用这种方法,请尝试在myConnection.Close()调用上设置断点 - 然后.mdf使用 SQL Server Mgmt Studio 检查文件 - 我几乎可以肯定您的数据在那里。

我认为真正的解决方案是

  1. 安装 SQL Server Express(反正你已经完成了)

  2. 安装 SQL Server Management Studio Express

  3. 在SSMS Express中创建您的数据库,给它一个逻辑名称(例如StoreManagerDB

  4. 使用它的逻辑数据库名称(在服务器上创建它时给出)连接到它——不要乱用物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:

    Data Source=.\\SQLEXPRESS;Database=StoreManagerDB;Integrated Security=True
    

    其他一切都和以前完全一样...

另请参阅 Aaron Bertrand 的优秀博文 踢坏习惯:使用 AttachDbFileName了解更多背景信息。


推荐阅读