2011-03-21 3 views
0

私は問題があり、あなたの助けが欲しいです。私は自分のページに編集ボタンとテキストボックスを持っています。データベースからこれらのテキストボックスに1つのレコードを編集したいと思います。私は次のコードを書いた。編集ボタンをクリックすると結果が出る。結果はテキストボックスに読み込まれます。しかし、同じIDで2回目にページを実行しようとすると、「指定されたキャストは無効です。」というエラーが表示されます。何がうまくいかないの?私はint ID = 3を使用しました。この例では3番目のレコードを取得するテキストボックスを使用してデータベースからレコードを編集/更新するにはどうすればよいですか?

保護無効Button2_Click(オブジェクト送信者、EventArgsの電子)

{

DataClassesDataContextのCXT =新しいDataClassesDataContext(); USER_TABLE aChar = cxt.USER_TABLEs.Single(c => c.ID == 3); //単一のレコードを取得します

  fname2.Text = aChar.FIRST_NAME; 
      lname2.Text = aChar.LAST_NAME; 
      pob2.Text = aChar.PLACE_OF_BIRTH; 
      pom2.Text = aChar.PLACE_OF_MARRIAGE; 
      education2.Text = aChar.EDUCATION; 
      occupation2.Text = aChar.OCCUPATION; 
      pod2.Text = aChar.PLACE_OF_DEATH; 
      String str = aChar.DATE_OF_BIRTH.ToString(); 
      String str1 = aChar.DATE_OF_MARRIAGE.ToString(); 
      String str2 = aChar.DATE_OF_DEATH.ToString(); 
+0

LINQに関連するものはありません。あなたの質問を編集します。 –

+0

スティーブン - 彼はLinq-to-sqlを使用しているので、おそらくsqlとlinqを削除してlinq-to-sqlを入れていますか? – Stuart

+0

LINQ呼び出し(.Single)は1つありますが、サイトで例外が発生していないため、問題は発生していません(LINQ呼び出しが失敗した場合、Singleは例外をスローします)。そうでなければエラーが表示されます出力、同じページではありません。 –

答えて

0

なぜあなたのイベントハンドラコードでif (!Page.IsPostBack)をやっていますか?私は通常、イベントのみポストバック時に提起されていることを言うと思います

...

私はめったにIsPostBackプロパティPageLoad以外では使用しませ参照してください。あなたが明示的コンテキストに

​​
+0

OK!if(!Page.IsPostBack)を削除しました。繰り返しますが、同じページに結果がありません。何もない!問題はID私のことです。理由は、このコードはそれを取得することはできません。 – dali1985

+0

まず、あなたの質問を修正する必要があります。次に、ID = 3に設定し、要求に渡されたIDですぐに上書きします。 URLと共に渡されたIDパラメータが有効な番号でない場合、TryParseは失敗し、何も取得しません。 –

+0

あなたのコメントのためのスティーブンありがとう!だか​​ら私は第3のIDでレコードを取得するために変更することはできますか? tryParse呼び出しの前に – dali1985

0

(シングルを使用して)オブジェクトを取得したときに指定したキャスト例外を取得していることが表示されます。オブジェクトモデルとデータベースの間のデータ型をチェックして、オブジェクトがデータベースで文字列を使用する番号を期待していないことを確認することができます(逆も同様です)。また、オブジェクトおよびデータベース列のNULL可否を確認してください。 LINQ to SQLは、バインド時に暗黙の型変換をサポートしません。

なぜ最初のリクエストでは機能しているのですが、2番目のリクエストでは機能していないのですが、リクエスト間で何が変更されましたか?また、2つの要求の間にコンテキストが維持されていますか? Singleは、同じIDが2回目に要求されたときにフェッチされた値をキャッシュしてクエリパイプラインを短絡させます。そのため、Singleを使用すると、コンテキストが有効になっていればデータベース要求が1つしか表示されません。 ctx.Log = Console.Outを使用してデータベース要求をログに記録するか、SQLプロファイラがあればそれを使用してみてください。

+0

私のコードにこのコンテキストを追加する必要があるという意味ですか?私の更新ボタンにこのコンテキストがあるので – dali1985

+0

最後の行に追加 - あなたはそれを呼び出していないデータベースを更新しないでください。 http://www.richardbushnell.net/2008/02/18/how-to-update-data-with-linq-to-sql/の例を参照 - データの取得、データの更新、変更の送信 – Stuart

0

をして、変更を保存する必要が