Проблема в обновлении базы данных через приложение Windows - PullRequest
0 голосов
/ 08 апреля 2009

У меня есть вопрос.

У меня проблемы с обновлением данных в базе данных SQL с помощью Windows Forms (проект Visual Studio).

Вот что я делаю:

  • Я получаю информацию о пользователе в текстовых полях.
  • Я редактирую некоторые из них.
  • Я делаю 1 назад и снова попадаю в эту форму. Информация обновлена.
  • При выходе и повторном входе в систему отображаются старые данные!

Кажется, что он временно меняет базу данных. Нужно ли устанавливать какие-либо свойства или что-то еще?

Я использую приложение win ... и сохранил обратную ссылку, которая возвращает меня к предыдущей форме. посмотрим, что произойдет

  1. У меня есть две кнопки showUserInfo и SaveUserInfo..ok?

  2. Нажатие на showUserInfo извлекает данные из БД и отображает их в форме.

  3. , затем скажите, что я редактирую возраст или адрес пользователя и нажимаю кнопку saveUserInfo. Это возвращает мне успех.

  4. Теперь я снова нажимаю на ShowUserInfo, и он возвращает мне информацию, которую я только что обновил. Даже если я перехожу к предыдущей форме, а затем снова к этой форме, я могу c обновленной информацией. Пока я нахожусь в одном запуске приложения, я могу c обновленной информацией.

  5. Теперь, когда я выйду из приложения методом .close (). и снова запустите приложение, оно показывает мне старую информацию, это означает, что БД не была обновлена.

  6. когда я открываю таблицу 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

Пожалуйста, помогите!

Спасибо

Ответы [ 4 ]

2 голосов
/ 09 апреля 2009

Похоже, вы используете DataSet. После сохранения он сохраняется в DataSet, но DataSet еще не обновляется в БД. Вот почему на следующем экземпляре приложения отображаются старые данные.

Вам необходимо выполнить ds.Update () в DataSet.

Одна вещь, которую нужно запомнить Компьютеры никогда не ошибаются, это человек, который создает ошибки :)

Если вы можете вставить свой код, это поможет больше.

0 голосов
/ 09 апреля 2009

Я думаю, что вы могли бы изменять данные только в локальных переменных (может быть, набор данных, как указано в nils_gate) и вообще не сохранять данные в базе данных. Какой у вас код в функции сохранения?

Это также может произойти, если вы используете tansactions для обновления своих данных и не совершаете транзакцию.

0 голосов
/ 08 апреля 2009

Я думаю, что Zim использует автоматически сгенерированные наборы данных вместе с элементами управления Winforms. Чтобы отправить данные обратно в базу данных, в автоматически сгенерированной форме вы нажимаете кнопку «Сохранить», Zim?

0 голосов
/ 08 апреля 2009

Как вы получаете свои данные? Похоже, вы на самом деле не вносите данные в базу данных, а храните их локально.

Если вы используете DataReaders, убедитесь, что вы не просто обновляете полученные данные, но, скорее, обновляете данные, а затем фиксируете изменения в базе данных.

Редактировать: Вы говорите, что «делаете 1 назад», это звучит так, как будто вы используете приложение ASP.Net (даже если вы заявили, что это приложение Windows Forms). Возможно, вы не убираете дату в текстовых полях, и поэтому кажется, что база данных обновлена, даже если вы на самом деле не зафиксировали изменения в БД?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...