- PR -

ドロップダウンリスト値の登録

投稿者投稿内容
聖人@SKB
ベテラン
会議室デビュー日: 2003/03/26
投稿数: 58
お住まい・勤務地: 横浜(MM21)勤務の筈だがいつも顧客先常駐
投稿日時: 2004-11-17 14:01
ASP.NETによって生成されるHTMLは毎回初期化されているんだよ、
ということを理解することが必要かと思われます。
ボタンクリック等のイベントが発生した場合でも、
ページは初期化->前回の値を復元->Page_Load->イベントを実行->HTMLを書き出し
ということが行われています。
ですから、今回の件、私もDropDownListへの値設定が毎回行われているものと
思います。
3m
常連さん
会議室デビュー日: 2004/11/05
投稿数: 34
投稿日時: 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
3m
常連さん
会議室デビュー日: 2004/11/05
投稿数: 34
投稿日時: 2004-11-17 17:15
>("SELECT コード FROM リストコード WHERE 事由 = '& Acquirecause &' ",objInputDb2)
を("SELECT コード FROM リストコード WHERE 事由 = '" & Acquirecause & "'",objInputDb2)
に書き換えたのですが…。
「指定されたキャストは有効ではありません」とエラーがでました。
パラメータを用いて書いても同じエラーが出ます。
何が間違っているのかわかりません。

ヒントがあればよろしくお願いします。
NYRL
ベテラン
会議室デビュー日: 2003/07/14
投稿数: 90
投稿日時: 2004-11-17 17:28
>("SELECT コード FROM リストコード WHERE 事由 = '" & Acquirecause & "'",objInputDb2)
("SELECT コード FROM リストコード WHERE 事由 = '" + Acquirecause + "'",objInputDb2)
の気が・・・
3m
常連さん
会議室デビュー日: 2004/11/05
投稿数: 34
投稿日時: 2004-11-17 18:21
お返事ありがとうございます。
("SELECT コード FROM リストコード WHERE 事由 = '" + Acquirecause + "'",objInputDb2)
と変えてみました。
それでもエラーが出てしまいます。
上記の「コード」の部分を「事由」に変えるとエラーはなく値は取れます(>_<)
SQL文がおかしいのでしょうか?
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2004-11-17 18:53
まず、
 AcquirecauseCode = AcquirecauseCodeDr.GetString(0)
の個所はおかしいですよね。
Integer型の変数へStrig型の値を代入しようとしています。

引用:

「コード」の部分を「事由」に変えるとエラーはなく値は取れます


ということは、恐らくDBのデータ型が
 「コード」・・・数値型
 「事由」・・・文字列型
となっているからではないでしょうか。

# 順を追ってゆっくり見ていけば、何が悪いのか必ず見えてきますよ

---
間違い修正(汗

[ メッセージ編集済み 編集者: えんぞ@見習 編集日時 2004-11-17 18:55 ]
聖人@SKB
ベテラン
会議室デビュー日: 2003/03/26
投稿数: 58
お住まい・勤務地: 横浜(MM21)勤務の筈だがいつも顧客先常駐
投稿日時: 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()を使うとダメですね。

※えんぞ@見習さんの書き込みの時点で解決かと思いましたが、
長々と書いていたので、捨てるのが勿体無くて投稿しました。
3m
常連さん
会議室デビュー日: 2004/11/05
投稿数: 34
投稿日時: 2004-11-18 09:17
えんぞ@見習さん、聖人@SKBさん
ありがとうございました。

AcquirecauseCodeDr("コード")にて解決いたしましたm(_ _)m
ASPからASP.NETへの移行にて初歩的なことで色々わからないことがあり
参考書など大まかなことしか書かれていないので、自分で調べるだけでいっぱいいっぱいです
今回もお手数をおかけしました。
また一つ勉強になりました。

これからまた機会がありましたら、よろしくお願いしますm(_ _)m
ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)