0

名前の付いたテーブルが 1 つありますCivilStatus

CivilStatusこれらの列があり、すべてbitデータ型があります:

  • Single (bit)
  • Married (bit)
  • Widow (bit)
  • Separated (bit)
  • Live-in (bit)

ここで、VB.NET で CheckedListBox という名前のプロジェクトを作成しましたclbCivilStatus。CheckedListBoxitemsプロパティ内には、上に挙げたコレクションがあります。これは、ストアド プロシージャを使用してテーブルに値を設定するために作成したコードです。

Dim single as Boolean
Dim married as Boolean
Dim widow as Boolean
Dim separated as Boolean
Dim livein as Boolean

single = IIf(clbCivilStatus.SelectedItem(0), 1, 0)
married = IIf(clbCivilStatus.SelectedItem(1), 1, 0)
widow = IIf(clbCivilStatus.SelectedItem(2), 1, 0)
separated = IIf(clbCivilStatus.SelectedItem(3), 1, 0)
livein = IIf(clbCivilStatus.SelectedItem(4), 1, 0)

 Dim strConn As String = "my sql connection"
            Dim sqlCon As SqlConnection

            sqlCon = New SqlConnection(strConn)

            Using (sqlCon)

                Dim sqlComm As New SqlCommand

                sqlComm.Connection = sqlCon

                sqlComm.CommandText = "Insert"
                sqlComm.CommandType = CommandType.StoredProcedure

sqlComm.Parameters.AddWithValue("Single", single)
sqlComm.Parameters.AddWithValue("Married", married)
sqlComm.Parameters.AddWithValue("Widow", widow)
sqlComm.Parameters.AddWithValue("Separated", separated)
sqlComm.Parameters.AddWithValue("LiveIn", livein)

   sqlComm.ExecuteNonQuery()

    End Using

...しかし、ビジュアルスタジオは私にこのエラーを与えます:

InvalidCastException が処理されませんでした

タイプ 'Char' からタイプ 'Boolean' への変換は無効です。

データベースにブール値が必要です。CheckedListBox を使用してこれを行う方法はありますか?

4

1 に答える 1

0

あなたのコードはプロパティを使用していますSelectedItem(x)が、これはリストの唯一のSelectedItem要素の文字列内の x. 番目の文字への参照です。
リスト内の x 項目に関連付けられたチェックボックスの値ではありません。

チェックボックスの値を取得するには、GetItemCheckState を使用して列挙型CheckState.Checkedと比較する必要があります。

single = IIf(clbCivilStatus.GetItemCheckState(0) = CheckState.Checked, 1, 0)
married = IIf(clbCivilStatus.GetItemCheckState(1) = CheckState.Checked, 1, 0)
widow = IIf(clbCivilStatus.GetItemCheckState(2) = CheckState.Checked, 1, 0)
separated = IIf(clbCivilStatus.GetItemCheckState(3) = CheckState.Checked, 1, 0)
livein = IIf(clbCivilStatus.GetItemCheckState(4) = CheckState.Checked, 1, 0)
于 2014-10-20T09:40:40.430 に答える