2014-10-20 54 views
0

我有1台名为CivilStatusVB.NET和SQL Server将在确定布尔值使用CheckedListBox

CivilStatus有这些列,所有bit数据类型:

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

现在,我在VB.NET中创建了一个项目与CheckedListBox它命名为clbCivilStatus。 CheckedListBox items属性是我上面列出的集合。这是我做了把价值观在我的表使用存储过程的代码:

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的是未处理

从类型转换“字符“布尔”是无效的。

我想在我的数据库布尔值,有没有办法做到这一点使用CheckedListBox?

+0

单是保留关键字选择一个不同的名称。 – Codexer 2014-10-20 09:11:01

回答

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)