2009-04-08 27 views
0

質問があります。問題Windowsアプリケーションからデータベースを更新する際に

Windowsフォーム(Visual Studioプロジェクト)を使用してSQLデータベースのデータを更新する際に問題が発生しています。ここで

は、私が何をすべきかです:

  • 私はテキストボックスにユーザー情報を取得します。
  • 私はそれらのいくつかを編集します。
  • 私はこのフォームにもう1回戻る。情報が更新されます。
  • もう一度終了してログインすると、古いデータが表示されます。

データベースを一時的に変更しているようです。プロパティや何かを設定する必要はありますか?

私はwinアプリケーションを使用しています。私は前のフォームに2を必要とするバックリンクを保持しています。 は、私は2つのボタンshowUserInfoとSaveUserInfo..okを持って

  1. を何が起こるかを参照してください?

  2. showUserInfoをクリックすると、dbからデータが取得され、フォームに表示されます。

  3. 次に、ユーザーの年齢や住所を編集し、saveUserInfo button.itをクリックすると私の成功が返されます。

  4. 私はShowUserInfoをもう一度クリックして、私はちょうど私がpreviosフォームに行くと、このフォームに行くと私はちょうどupdated.even情報を取得、私は更新情報をすることができます。限り、アプリケーションの私は同じ更新情報を更新することができます。

  5. これで、アプリケーションを.close()メソッドで終了しました。もう一度アプリケーションを実行すると、古い情報が表示されます。つまり、dbが更新されていません。

  6. 私はuserInfoテーブルを開くと、更新されません。

私の保存ボタンと表示ボタンは、データアクセスレイヤーの関数を呼び出して、ストアドプロシージャを呼び出します。

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 

助けてください...

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

//そして最後に、これは私の保存されている手順:私はこれは私が何をすべきかである任意ののDataReaders

を使用していません!

ありがとうございました

+0

アップデート後に手動でクエリを実行して、アップデートが確実に行われていますか? – Seibar

+0

データアクセスを達成する方法の詳細が必要 – RobS

答えて

0

どのようにデータを取得していますか?実際にデータをデータベースにコミットするのではなく、ローカルに保管するように思えます。

DataReaderを使用している場合は、取得したデータを更新するだけでなく、データを更新してデータベースに変更をコミットすることを確認してください。

編集:あなたは、あなたがASP.Netアプリケーションを使用しているかのように(Windowsフォームアプリケーションであると言っていても)「do back 1」と言います。おそらくDBに変更をコミットしていなくても、データベースが更新されたかのように表示されます。

0

私はZimがWinformsコントロールと共に自動的に生成されたデータセットを使用していると思います。データをデータベースに戻すには、自動的に生成されたフォームで、「保存」ボタン、Zimをクリックしていますか?

+0

自動的に生成されたデータセットはどういう意味ですか? ストアドプロシージャを使用しています。 貼り付けたコードをご覧ください。 PLZは私を助けます。 –

2

DataSetを使用しているようです。保存すると、DataSetに保存されますが、DataSetはまだDBに更新されません。そのため、次のアプリケーションインスタンスで古いデータが表示されます。

DataSetでds.Update()を実行する必要があります。 コンピュータを覚えて

ことの一つは、間違ったことはありませんあなたのコードを貼り付けることができた場合は、バグ :)

を作成し、その人のそれはより多くのを助けるでしょう。

0

ローカル変数のみのデータ(おそらくnils_gateが指摘するデータセット)を変更して、データをデータベースに保存しないことが考えられます。保存機能であなたのコードは何ですか?

これは、tansactionsを使用してデータを更新し、トランザクションをコミットしていない場合にも発生する可能性があります。

関連する問題