0

アプリケーションのページで送信ボタンを押すと、上記のフォームの情報がデータベースに保存されます。プログラムを実行するとこのエラーが発生しますが、ブレークポイントを使用してSQLtext文字列をコピーし、このコードをDBマネージャーの新しいクエリに貼り付けると機能します。エラーは常に次のように表示されますが、「Speed」はddlDrugsの値によって異なります(たとえば、Alcoholを選択した場合、エラーは文字列「Alcohol」からタイプ「Integer」への変換は無効です):

Conversion from string "Speed" to type 'Integer' is not valid. 

なぜこれが起こっているのか誰かがわかりますか?ddlDrugsは、ddlDrugTypeが変更されたときにトリガーされるポストバックを使用して入力されるドロップダウンです。以下にリストされているのは、送信ボタンが押されたときのサブであり、その下にドロップダウンをバインドする関数があります。

    Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSubmit.Click
    Dim objGetConnInfo As New ConnInfo
    Dim strConn As String
    strConn = objGetConnInfo.GetConnString
    Dim objConn As SqlConnection
    objConn = New SqlConnection(strConn)
    Dim myCmd As SqlCommand
    myCmd = New SqlCommand
    myCmd.Connection = objConn
    myCmd.CommandType = CommandType.Text
    Dim ds As SqlClient.SqlDataReader
    objConn.Open()
    Dim fName As String = txtfName.Text
    Dim lName As String = txtlName.Text
    Dim DOB As String = ddlDOBmonth.SelectedValue & "/" & ddlDOBday.SelectedValue & "/" & ddlDOByear.SelectedValue
    Dim sexChoice As Integer = rdoSex.SelectedIndex
    Dim sex As String
    If sexChoice = 0 Then
        sex = "m"
    ElseIf sexChoice = 1 Then
        sex = "f"
    End If
    Dim SSN As String = txtSSN.Text
    Dim address As String = txtAddress.Text
    Dim city As String = txtCity.Text
    Dim state As String = ddlState.SelectedValue
    Dim zip As String = txtZip.Text
    Dim phone As String = txtPhone1.Text
    Dim cellPhone As String = txtPhone2.Text
    Dim altPhone As String = txtPhone3.Text
    Dim EC As String = txtECname.Text
    Dim relationshipIndex As Integer = ddlECrelationship.SelectedValue
    myCmd.CommandText = "Select Name from Relationships where ID = " & relationshipIndex
    Dim relationship As String = myCmd.ExecuteScalar

    Dim ECphone As String = txtECphone.Text
    Dim findRRindex As Integer = ddlHowRR.SelectedValue
    myCmd.CommandText = "Select Name from foundRR where ID =" & findRRindex
    Dim findRR As String = myCmd.ExecuteScalar
    Dim rush As String
    If chkRush.Checked = True Then
        rush = "1"
    Else
        rush = "0"
    End If

    Dim reason As String = txtReason.Text
    Dim drugType As String = ddlDrugType.SelectedValue
    Dim drugIndex As Integer = ddlDrug.SelectedValue
    myCmd.CommandText = "Select Drug from " & drugType & " where Id = " & drugIndex
    Dim drugObj As Object = myCmd.ExecuteScalar
    Dim drug As String = ddlDrug.SelectedItem.Text

    Dim previous As String = txtPrevTreatment.Text
    Dim dateCompleted As String = ddlDOCmonth.SelectedValue & "/" & ddlDOCdate.SelectedValue & "/" & ddlDOCyear.SelectedValue
    Dim treatmentRep As String = txtTreatmentRep.Text
    Dim test As String = ddlDrug.SelectedValue



    '                        insert into Clients values ('mike','abramowitz','9/12/1986', 'm', 187664309, '2132 mather way',                               'elkins park', 'pa', 19027, '2222222222','3333', '4', 'dad', 'mom',                                                            '55', 'magic', 0, 'need it', 'drug type',                                              'pot', 'none', '9/12/1988', 'tim')
    Dim SQLtext As String = "exec insertClient '" & fName & "','" & lName & "','" & DOB & "', '" & sex & "'," & SSN & ", '" & address & "', '" & city & "', '" & state & "', " & zip & ", '" & phone & "','" & cellPhone & "', '" & altPhone & "', '" & EC & "', '" & relationship & "', '" & ECphone & "', '" & findRR & "'," & rush & ", '" & reason & "', ' " & drugType & "','" & drug & "', '" & previous & "', ' " & dateCompleted & "', '" & treatmentRep & "')"



    Dim clientID As Integer = myCmd.ExecuteScalar
    objConn.Close()
    myCmd.Dispose()


End Sub

ポストバックでドロップダウンをバインドする

    Protected Sub ddlDrugType_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    Dim objGetConnInfo As New ConnInfo
    Dim strConn As String
    strConn = objGetConnInfo.GetConnString
    Dim objConn As SqlConnection
    objConn = New SqlConnection(strConn)
    Dim myCmd As SqlCommand
    myCmd = New SqlCommand
    myCmd.Connection = objConn
    myCmd.CommandType = CommandType.Text
    Dim ds As SqlClient.SqlDataReader
    myCmd.CommandText = "Select Id, Drug from " & ddlDrugType.SelectedValue
    objConn.Open()
    ds = myCmd.ExecuteReader
    ddlDrug.DataSource = ds
    ddlDrug.DataTextField = "Drug"
    ddlDrug.DataValueField = "Id"
    ddlDrug.DataBind()
    ds.Close()

    objConn.Close()

    myCmd.Dispose()


End Sub

ここに詳細なエラーがあります

System.InvalidCastException was unhandled by user code

HResult=-2147467262メッセージ=文字列"Speed"からタイプ'Integer'への変換が無効です。Source = Microsoft.VisualBasic StackTrace:at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(Object Value)at RR.NewCustomer.btnSubmit_Click(Object sender、EventArgs e)in C :\ Users \ Administrator \ Documents \ Visual Studio 2010 \ Projects \ RR \ RR \ NewCustomer.aspx.vb:line 276 at System.Web.UI.WebControls.Button.OnClick(EventArgs e)at System.Web.UI.WebControls .Button.RaisePostBackEvent(String eventArgument)at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl、String eventArgument)at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint、Boolean includeStagesAfterAsyncPoint)InnerException:System.FormatException HResult = -2146233033 Message = Input string was not in正しい形式。Source = Microsoft.VisualBasic StackTrace:at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value、NumberFormatInfo NumberFormat)at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)InnerException:ブール値includeStagesAfterAsyncPoint)InnerException:System.FormatException HResult = -2146233033Message=入力文字列が正しい形式ではありませんでした。Source = Microsoft.VisualBasic StackTrace:at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value、NumberFormatInfo NumberFormat)at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)InnerException:ブール値includeStagesAfterAsyncPoint)InnerException:System.FormatException HResult = -2146233033Message=入力文字列が正しい形式ではありませんでした。Source = Microsoft.VisualBasic StackTrace:at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value、NumberFormatInfo NumberFormat)at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)InnerException:

編集:これが実際のドロップダウンのコードです

<asp:dropdownlist style="Z-INDEX: 0" id="ddlDrugType" 
                                OnSelectedIndexChanged="ddlDrugType_SelectedIndexChanged" runat="server" 
                                Height="16px" ViewStateMode="Enabled" AutoPostBack="True"></asp:dropdownlist>

<asp:dropdownlist style="Z-INDEX: 0" id="ddlDrug" runat="server"></asp:dropdownlist>

ご協力いただきありがとうございます。

4

1 に答える 1

0

ddlDrugのhtmlコードを投稿できますか。私はあなたが次のようなものを持っているのではないかと疑っています

<option selected="selected" value="Speed">Speed</option>
<option value="Alchol">Alchol</option>

代わりに、値に何らかのIDが必要です。

または変更する必要があります

Dim drugIndex As Integer = ddlDrug.SelectedValue

Dim drugIndex As String = ddlDrug.SelectedValue
于 2012-11-22T01:12:51.083 に答える