问题通过Windows应用程序更新数据库

时间:2009-04-08 13:44:43

标签: .net database winforms

我有一个问题。

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

以下是我的工作:

  • 我在文本框中获取用户信息。
  • 我编辑其中一些。
  • 我做了1回来再次来到这个表格。信息已更新。
  • 当我退出并再次登录时,它会显示旧数据!

好像它暂时改变了数据库。我是否需要设置任何属性或其他内容?

我正在使用win应用程序..而且我在它上面保留了一个后面的链接,它带我以前的表格。 看看会发生什么

  1. 我有两个按钮showUserInfo和SaveUserInfo..ok?

  2. 点击showUserInfo从数据库中检索数据并将其显示在表单上。

  3. 然后说我编辑用户的年龄或地址,然后点击saveUserInfo button.it让我成功。

  4. 我现在再次点击ShowUserInfo,它会检索我刚刚更新的信息。如果我转到previos表单,然后再转到此表单,我可以更新信息。只要我在应用程序的相同运行中,我就可以获得更新的信息。

  5. 现在我退出了.close()方法的应用程序。并再次运行该应用程序,它向我显示旧信息,这意味着数据库未更新。

  6. 当我打开userInfo表时,它不会更新。

  7. 我的保存和显示按钮调用数据访问层功能,后者又调用存储过程。我没有使用过任何数据加载器

    这就是我的所作所为:

    //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
    

    请帮忙!

    谢谢

4 个答案:

答案 0 :(得分:2)

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

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

要记住的一件事计算机永远不会错误造成错误的人:)

如果您可以粘贴代码,则可以提供更多帮助。

答案 1 :(得分:0)

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

如果您正在使用DataReader,请确保您不仅要更新检索到的数据,还要更新数据,然后将更改提交到数据库。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

如果您使用tansactions来更新数据而不提交交易,也可能发生这种情况。