- - PR -
DropDownListのSelectedItem.ValueのDBインサート
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-02-09 17:08
ASP.NET(WebMatrix使用)でWebアプリケーションを開発しています。
言語はVB.NET、DBはMSDE、開発マシンは2000 SP4です。 DBのテーブルにバインドしたDropDownListで選択されたValueをInsertDataMethodを使い、同DBの別テーブルに登録しようとしています。 DropDownListは次のように定義しています。 Dim ds_process As DataSet Dim sCmd_process as System.Data.SqlClient.SqlDataAdapter Dim connectionString As String = "server='(local)'; trusted_connection=true; database='process_db'" Dim sConn As System.Data.IDbConnection = New System.Data.SqlClient.SqlConnection(connectionString) Dim strSQL_process as String= "SELECT process_code, process_name FROM process_master WHERE process_master.post_code =" & drpl_post.SelectedItem.Value sCmd_process = new System.Data.SqlClient.SqlDataAdapter(strSQL_process,sConn) ds_process = New DataSet() sCmd_process.Fill(ds_process) drpl_process1.DataSource = ds_process drpl_process1.DataTextField = "process_name" drpl_process1.DataValueField = "process_code" drpl_process1.DataBind() 登録タイミングはButtonのクリックイベントです。 クリックイベントでは、 InsertData(drpl_process1.SelectedItem.Value) としています。※実際は17個の引数をもち、いずれの引数も別DropDownListのSelectedItem.Valueを渡しています) InsertDataの引数のデータ型はすべてIntegerとなっています。 drpl_process1とまったく同じようにして生成した、他のデータはエラーなく登録されますが、 このdrpl_process1.SelectedItem.Valueでエラーが出てしまいます。 エラー内容は次のとおりです。 入力文字列の形式が正しくありません。 例外の詳細: System.FormatException: 入力文字列の形式が正しくありません。 ちなみにこの部分に数字を直接書いてButtonをクリックすると正常に保管されます。 一体drpl_process1にどのような問題があるのでしょうか? drpl_process1はTableに配置したDropDownListです。 アドバイスをお願いします。 | ||||
|
投稿日時: 2005-02-09 17:53
こんばんわ。
入力文字列の形式が正しくありません。 例外の詳細: System.FormatException: 入力文字列の形式が正しくありません。 このエラーからして、たぶんdrpl_process1.SelectedItem.Valueには文字列が 入っていると思われます。InsertData(ByRef test As Integer)な訳ですよね? 実際簡単なプログラムで試しましたが、DropDownList1.SelectedItem.Value に文字列(例えば"Value1"など)が入っている場合に同様のエラーが発生します。
一度、InsertData(DropDownList1.SelectedItem.Value)のところで ブレークポイント置いてみて中身を見てください。 | ||||
|
投稿日時: 2005-02-09 17:54
こんにちは。
質問からは正確な解答はしかねますが、原因の可能性だけでも。 System.FormatExceptionということですから、 メソッドを呼び出すときに渡した引数の書式が、 対応する仮パラメータ型の書式と一致していないということ。 怪しいのはInsertDataメソッド(自作?) の中でFormat.Stringメソッド等を使用して 引数の渡し方をミスっているのではないかなと思うのですが。 引数の数が17個というのがとても気になります。 [ メッセージ編集済み 編集者: Milan 編集日時 2005-02-09 17:56 ] | ||||
|
投稿日時: 2005-02-10 13:44
SE卵さん、Milanさん返信ありがとうございます。
drpl_process1.SelectedItem.Value値を確認する為に、@PageディレクティブTrace="True"とDebug="True"を追加しました。 その結果、上記値は文字列ではなく数値が入っていました。 WebMatrixを使ってブレークポイントを貼る方法がわからないで、トレース昨日を使いました。 InsertDataメソッドは、WebMatrixのコードウィザードを使い生成しました。 これがその関数です。 Function InsertData( _ ByVal post_code As Integer, _ ByVal project_code As Integer, _ ByVal process_code1 As Integer, _ ByVal process_code2 As Integer, _ ByVal process_code3 As Integer, _ ByVal process_code4 As Integer, _ ByVal process_code5 As Integer, _ ByVal process_code6 As Integer, _ ByVal process_code7 As Integer, _ ByVal process_code8 As Integer, _ ByVal process_code9 As Integer, _ ByVal process_code10 As Integer, _ ByVal process_code11 As Integer, _ ByVal process_code12 As Integer, _ ByVal process_code13 As Integer, _ ByVal process_code14 As Integer, _ ByVal process_code15 As Integer) As Integer また、drpl_process1.SelectedItem.Valueを引き渡し、実際のDBにセットされる部分のコードは次のとおりです。 Dim dbParam_process_code1 As System.Data.IDataParameter = New System.Data.SqlClient.SqlParameter dbParam_process_code1.ParameterName = "@process_code1" dbParam_process_code1.Value = process_code1 dbParam_process_code1.DbType = System.Data.DbType.Int32 dbCommand.Parameters.Add(dbParam_process_code1) DbtypeもInt32となっているため問題ないと思うのですが。 引数の数とかに問題があるのでしょうか?ですが、InsertDataメソッドに数値を直接引き渡すと正常にDB登録しますので、引数の数には問題ないですよね? 初歩的な質問攻めで申し訳ありませんが、よろしくお願いします。 | ||||
|
投稿日時: 2005-02-10 14:38
InsertDataに文字列を引数で渡しているんですよね?
ソースの先頭に Option Strict On を追加してみてください。コンパイルが通りますか? | ||||
|
投稿日時: 2005-02-10 15:06
WebMatrixを使用しているならば、 <%@ Page Language="VB" Strict="True"%> | ||||
|
投稿日時: 2005-02-10 16:06
失礼しました。 WebMatrixではインラインコードのみサポートなのですね。 デバッグ機能もないし、結構大変ですね。。。 | ||||
|
投稿日時: 2005-02-10 21:28
DropDownList.SelectedValueはStringですよ。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwebuiwebcontrolslistitemclassvaluetopic.asp HTMLなんですからね。数字が入った文字列です。ちゃんとパースしてください。 _________________ |
1|2|3
次のページへ»