我有一个问题。
我在使用Windows窗体(Visual Studio项目)更新SQL数据库中的数据时遇到问题。
以下是我的工作:
好像它暂时改变了数据库。我是否需要设置任何属性或其他内容?
我正在使用win应用程序..而且我在它上面保留了一个后面的链接,它带我以前的表格。 看看会发生什么
我有两个按钮showUserInfo和SaveUserInfo..ok?
点击showUserInfo从数据库中检索数据并将其显示在表单上。
然后说我编辑用户的年龄或地址,然后点击saveUserInfo button.it让我成功。
我现在再次点击ShowUserInfo,它会检索我刚刚更新的信息。如果我转到previos表单,然后再转到此表单,我可以更新信息。只要我在应用程序的相同运行中,我就可以获得更新的信息。
现在我退出了.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
请帮忙!
谢谢
答案 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来更新数据而不提交交易,也可能发生这种情况。