- - PR -
ドロップダウンリスト値の登録
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-11-17 14:01
ASP.NETによって生成されるHTMLは毎回初期化されているんだよ、
ということを理解することが必要かと思われます。 ボタンクリック等のイベントが発生した場合でも、 ページは初期化->前回の値を復元->Page_Load->イベントを実行->HTMLを書き出し ということが行われています。 ですから、今回の件、私もDropDownListへの値設定が毎回行われているものと 思います。 | ||||
|
投稿日時: 2004-11-17 14:40
>では、こちらはどうでしょう?
>http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8369&forum=7 >http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6419&forum=7 >私のレスがヒントになります。 参考になりました。 本番用にはIf Not IsPostBack Then 〜 End If は書かれてあります ![]() テスト用として作った方にはIf Not IsPostBack Then 〜 End If を忘れていたため取得できてなかったですm(_ _)m 2.データベース(SQLServer)「リストコード」テーブルに接続し、取得したドロップダウンリスト値からコード番号を取得(SELECT コード FROM リストコード WHERE 事由 = 取得したドロップダウンリスト値) をテストしてみたところ… ここで値が取得できていませんでした。 <<コード>> Sub Button1_Click(sender As Object, e As EventArgs) Dim Acquirecause As String Acquirecause = gAcquirecause.SelectedItem.Value Dim objInputDb2 As New SqlConnection("Data Source=(local);User Id=sa;database='abc'") Dim objAcquirecauseCom As New SqlCommand("SELECT コード FROM リストコード WHERE 事由 = '& Acquirecause &' ",objInputDb2) Dim AcquirecauseCode As Integer objInputDb2.Open() Dim AcquirecauseCodeDr As SqlDataReader = objAcquirecauseCom.ExecuteReader() If AcquirecauseCodeDr.Read() Then AcquirecauseCode = AcquirecauseCodeDr.GetString(0) End If AcquirecauseCodeDr.Close() objInputDb2.Close() Dim rowsAffected As Integer = InsertCustomer( _ AcquirecauseCode) End Sub Function InsertCustomer( _ ByVal コード As String) As Integer Dim conString As String = "server='(local)'; user id='sa'; password=''; database='abc'" Dim con As New SqlConnection(conString) Dim SqlInsert As String = "INSERT INTO [コード] ([コード]) VALUES (@コード)" Dim cmd As New SqlCommand(SqlInsert, con) cmd.Parameters.Add("@コード", SqlDbType.NvarChar).Value = コード Dim rowsAffected As Integer = 0 con.Open Try rowsAffected = cmd.ExecuteNonQuery Catch: Finally con.Close End Try Return rowsAffected End Function SQL文が怪しいと思われるので今確認しておりますm(_ _)m | ||||
|
投稿日時: 2004-11-17 17:15
>("SELECT コード FROM リストコード WHERE 事由 = '& Acquirecause &' ",objInputDb2)
を("SELECT コード FROM リストコード WHERE 事由 = '" & Acquirecause & "'",objInputDb2) に書き換えたのですが…。 「指定されたキャストは有効ではありません」とエラーがでました。 パラメータを用いて書いても同じエラーが出ます。 何が間違っているのかわかりません。 ヒントがあればよろしくお願いします。 | ||||
|
投稿日時: 2004-11-17 17:28
>("SELECT コード FROM リストコード WHERE 事由 = '" & Acquirecause & "'",objInputDb2)
("SELECT コード FROM リストコード WHERE 事由 = '" + Acquirecause + "'",objInputDb2) の気が・・・ | ||||
|
投稿日時: 2004-11-17 18:21
お返事ありがとうございます。
("SELECT コード FROM リストコード WHERE 事由 = '" + Acquirecause + "'",objInputDb2) と変えてみました。 それでもエラーが出てしまいます。 上記の「コード」の部分を「事由」に変えるとエラーはなく値は取れます(>_<) SQL文がおかしいのでしょうか? | ||||
|
投稿日時: 2004-11-17 18:53
まず、
AcquirecauseCode = AcquirecauseCodeDr.GetString(0) の個所はおかしいですよね。 Integer型の変数へStrig型の値を代入しようとしています。
ということは、恐らくDBのデータ型が 「コード」・・・数値型 「事由」・・・文字列型 となっているからではないでしょうか。 # 順を追ってゆっくり見ていけば、何が悪いのか必ず見えてきますよ ![]() --- 間違い修正(汗 [ メッセージ編集済み 編集者: えんぞ@見習 編集日時 2004-11-17 18:55 ] | ||||
|
投稿日時: 2004-11-17 19:23
AcquirecauseCode = AcquirecauseCodeDr.GetInt32(0)
ならOKでしょう。 もしくはAcquirecauseCodeDr(0)とかAcquirecauseCodeDr("コード")とか。 当初はSQL文に "SELECT コード FROM リストコード WHERE 事由 = '& Acquirecause &' " と書いていた為、自由が '& Acquirecause &' こういう文字のものを検索し、 結果として0件だったため、If AcquirecauseCodeDr.Read() Thenに入らずに AcquirecauseCodeはDimにて宣言したときのまま=0 でInsert処理が行われた。 SQL文を "SELECT コード FROM リストコード WHERE 事由 = '" & Acquirecause & "'" と書き直したため If AcquirecauseCodeDr.Read() Thenに入るようになったが、 AcquirecauseCode = AcquirecauseCodeDr.GetString(0) としていたため、InvalidCastExceptionが発生した。 DBで数値型の場合、GetString()を使うとダメですね。 ※えんぞ@見習さんの書き込みの時点で解決かと思いましたが、 長々と書いていたので、捨てるのが勿体無くて投稿しました。 | ||||
|
投稿日時: 2004-11-18 09:17
えんぞ@見習さん、聖人@SKBさん
ありがとうございました。 AcquirecauseCodeDr("コード")にて解決いたしましたm(_ _)m ASPからASP.NETへの移行にて初歩的なことで色々わからないことがあり 参考書など大まかなことしか書かれていないので、自分で調べるだけでいっぱいいっぱいです ![]() 今回もお手数をおかけしました。 また一つ勉強になりました。 これからまた機会がありましたら、よろしくお願いしますm(_ _)m ありがとうございました。 |