.net 通过windows应用程序更新数据库时出现问题

.net 通过windows应用程序更新数据库时出现问题,.net,database,winforms,.net,Database,Winforms,我有个问题 使用Windows窗体(Visual Studio项目)更新SQL数据库中的数据时遇到问题 以下是我的工作: 我在文本框中获取用户信息 我编辑了其中一些 我不想再回到这张表格。信息已更新 当我退出并再次登录时,它会显示旧数据 似乎它暂时更改了数据库。我需要设置任何属性或什么吗 我正在使用win应用程序。。我在上面保留了一个反向链接,它将我带到上一张表格。 看看会发生什么 我有两个按钮showUserInfo和SaveUserInfo.好吗 单击showUserInfo从db检索数

我有个问题

使用Windows窗体(Visual Studio项目)更新SQL数据库中的数据时遇到问题

以下是我的工作:

  • 我在文本框中获取用户信息
  • 我编辑了其中一些
  • 我不想再回到这张表格。信息已更新
  • 当我退出并再次登录时,它会显示旧数据
似乎它暂时更改了数据库。我需要设置任何属性或什么吗

我正在使用win应用程序。。我在上面保留了一个反向链接,它将我带到上一张表格。 看看会发生什么

  • 我有两个按钮showUserInfo和SaveUserInfo.好吗

  • 单击showUserInfo从db检索数据并将其显示在表单上

  • 然后说我编辑了用户的年龄或地址,然后点击saveUserInfo按钮。它返回我成功

  • 现在,我再次单击ShowUserInfo,它会检索到我刚刚更新的信息。即使我先转到previos表单,然后再转到此表单,我也可以将更新的信息转换为c。只要我在应用程序的同一个运行中,我就可以保存更新的信息

  • 现在,当我退出appliaction by.close()方法时。然后再次运行应用程序,它会显示旧信息,这意味着数据库没有更新

  • 当我打开userInfo表时,它不会被更新

  • “我的保存”和“显示”按钮调用数据访问层函数,这些函数反过来调用存储过程。我没有使用任何数据阅读器

    我就是这么做的:

    //This the code for my form's save button as u can c....
    
    private void btnSave_Click(object sender, EventArgs e)
    { 
      string fName = txtFirstName.Text;
      string lName = txtLastName.Text;
      string gender;
      if (rdbtnMale.Checked == true)
      {
        gender = "Male";
      }
      else
      {
        gender = "Female";
      }
      string email = txtEmail.Text;
      int age = Convert.ToInt16(txtAge.Text);
      string address = txtAddress.Text;
      int flag;
      // here i call the DAL function.....
      flag = SHSProvider.UpdateUserInfo(userName, fName, lName, gender, email, age, address);
      if (flag == 1)
      {
        MessageBox.Show("Your Account Has been changed successfully");
      }
      else
      {
        MessageBox.Show("Sorry");
      }
    }
    
    //........................
    // this is the update function in my provider...
    
    public static int UpdateUserInfo(string userName, string fName, string lName, string gender, string email, int age, string address)
    {
      string strconn = ConfigurationManager.ConnectionStrings["SHSDatabaseConnectionString"].ToString();
      SqlParameter[] sqlparams = new SqlParameter[7];
      sqlparams[0] = new SqlParameter("@userName", userName);
      sqlparams[1] = new SqlParameter("@firstName", fName);
      sqlparams[2] = new SqlParameter("@lastName", lName);
      sqlparams[3] = new SqlParameter("@gender", gender);
      sqlparams[4] = new SqlParameter("@email", email);
      sqlparams[5] = new SqlParameter("@age", age);
      sqlparams[6] = new SqlParameter("@address", address);
      int flag = SqlHelper.ExecuteNonQuery(strconn, "sp_UpdateUserInfo", sqlparams);
      return flag;
    }
    
    //最后这是我的存储过程

    ALTER PROCEDURE dbo.sp_UpdateUserInfo 
    @userName nvarchar(30), 
    @fName nvarchar(30),
    @lName nvarchar(30),
    @gender nvarchar(10),
    @email nvarchar(30),
    @age int,
    @address nvarchar(30)
    AS
    update [T_UserInfo] set [FirstName] = @fName, [LastName] = @lName, [Gender] = @gender, [email] = @email, [Age] = @age, [Address] = @address where [UserName] = @userName
    RETURN
    
    请帮忙


    谢谢

    您是如何检索数据的?听起来您可能实际上并没有将数据提交到数据库,而是将其保存在本地

    如果您使用的是DataReader,请确保您不仅仅更新检索到的数据,而是更新数据,然后将更改提交到数据库


    编辑:您说“do 1 back”,听起来好像您正在使用ASP.Net应用程序(即使您声明它是windows窗体应用程序)。您是否可能没有清除文本框中的日期,因此看起来好像数据库已更新,即使您尚未将更改提交到数据库?

    我认为Zim正在使用自动生成的数据集以及Winforms控件。要以自动生成的形式将数据发送回数据库,是否单击“保存”按钮,Zim?

    看起来您正在使用数据集。保存后,它会保存到DataSet中,但DataSet尚未更新到DB中。这就是为什么在下一个应用程序实例上显示旧数据的原因

    您需要在DataSet上执行ds.Update()

    有一件事要记住计算机永远不会出错,那就是制造错误的人。:)


    如果你能粘贴你的代码,那会更有帮助。

    我认为你可以只修改局部变量中的数据(可能是nils_gate指出的数据集),而不将数据保存到数据库中。保存功能中的代码是什么


    如果您使用事务更新数据而未提交事务,也可能会发生这种情况。

    更新后是否手动运行查询以确保更新正在进行?需要了解有关如何实现数据访问的更多信息自动生成的数据集是什么意思?我正在使用存储过程。你能看看我贴的代码吗。请帮帮我。