Mysql 如何将单选按钮值写入Sql数据库?

Mysql 如何将单选按钮值写入Sql数据库?,mysql,sql,database,vb.net,asp-classic,Mysql,Sql,Database,Vb.net,Asp Classic,我一直在尝试写我的数据库,它几乎完成了我唯一的问题是无线电值,因为在网络表单中有两个问题被问到,回答是或否。我在stackover flow上发现了一个例子 Dim rbval As Integer If RadioButton1.Checked Then rbval = 1 Else rbval = 2 End If cmd.Parameters.Add(New SqlParameter("@ethics", SqlDbType.Int)) cmd.Parameters("@e

我一直在尝试写我的数据库,它几乎完成了我唯一的问题是无线电值,因为在网络表单中有两个问题被问到,回答是或否。我在stackover flow上发现了一个例子

Dim rbval As Integer
If RadioButton1.Checked Then
    rbval = 1
Else
    rbval = 2
End If
cmd.Parameters.Add(New SqlParameter("@ethics", SqlDbType.Int))
cmd.Parameters("@ethics").Value = rbval
但它不起作用,一直向我提供错误消息并突出显示代码的cmd.ExecuteNonQuery部分。然后我试着玩它,并投入:

Dim rbval As Integer
        If RadYes0.Checked Then
            rbval = 1
        Else
            rbval = 2
        End If
        cmd.Parameters.Add("@TeaAndCoffee", SqlDbType.Text).Value = RadYes0.Text
当我选择“是”时,它确实起作用,但当我选择“否”时,“是”值一直存储在数据库中,我可以看到我在代码中出错的地方,因为它总是从我试图修复的代码中选择“是”。我想知道有没有人有什么建议?下面是完整的代码

   Dim Con As SqlConnection
    Dim cmd As SqlCommand
    Dim recordsAffected As String
    Dim cmdstring As String = "INSERT [Event Table](EventTypeID, EventName, VenueName, NumberOfGuests, Date, ClientAddress, WeddingName, BuildingAddress, Canapes, Starter, MainCourse, Dessert, TeaAndCoffee) Values(@EventTypeID, @EventName, @VenueName, @NumberOfGuests, @Date, @ClientAddress, @WeddingName, @BuildingAddress, @Canapes, @Starter, @MainCourse, @Dessert, @TeaAndCoffee)"
    Con = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\YellowDoor.mdf;Integrated Security=True;User Instance=True")
    cmd = New SqlCommand(cmdstring, Con)
    cmd.Parameters.Add("@EventTypeID", SqlDbType.Text).Value = EventTypeDD.SelectedValue
    cmd.Parameters.Add("@EventName", SqlDbType.Text).Value = EventNametxt.Text
    cmd.Parameters.Add("@VenueName", SqlDbType.Text).Value = VenueLoDD.SelectedValue
    cmd.Parameters.Add("@NumberOfGuests", SqlDbType.Int).Value = CInt(NumOfGtxt.Text)
    cmd.Parameters.Add("@Date", SqlDbType.Int).Value = CInt(DateTxt.Text)
    cmd.Parameters.Add("@ClientAddress", SqlDbType.Text).Value = txtAddress.Text
    cmd.Parameters.Add("@WeddingName", SqlDbType.Text).Value = txtWedding.Text
    cmd.Parameters.Add("@BuildingAddress", SqlDbType.Text).Value = txtBAddress.Text
    cmd.Parameters.Add("@Canapes", SqlDbType.Text).Value = txtCanapes.Text
    cmd.Parameters.Add("@Starter", SqlDbType.Text).Value = txtStarter.Text
    cmd.Parameters.Add("@MainCourse", SqlDbType.Text).Value = txtMainCourse.Text
    cmd.Parameters.Add("@Dessert", SqlDbType.Text).Value = txtDessert.Text
    Dim rbval As Integer
    If RadYes0.Checked Then
        rbval = 1
    Else
        rbval = 2
    End If
    cmd.Parameters.Add("@TeaAndCoffee", SqlDbType.Text).Value = RadYes0.Text


    Con.Open()

    recordsAffected = cmd.ExecuteNonQuery
    Con.Close()
    Response.Redirect("MenuForm.aspx")

End Sub

查看SQL数据库中的表列类型。如果这是一种最符合逻辑的方式,那么它就像一个馅饼一样简单:

cmd.Parameters.Add("@Yourparam", SqlDbType.Bit).Value = IIf (Radyes0.Checked,1,0)
对于字符类型:

cmd.Parameters.Add("@Yourparam", SqlDbType.Char).Value = IIf (Radyes0.Checked,"Y","N")
对于NVarchar类型:

cmd.Parameters.Add("@Yourparam", SqlDbType.Nvarchar).Value = IIf (Radyes0.Checked,"Yes","No")
只要看一下你的桌子设计,你就会知道你需要哪句话。始终使用与数据库相同的数据类型

顺便问一下:这个例子的原因是什么

Dim rbval As Integer
    If RadYes0.Checked Then
        rbval = 1
    Else
        rbval = 2
    End If
    cmd.Parameters.Add("@TeaAndCoffee", SqlDbType.Text).Value = RadYes0.Text

总是将“是”保存到数据库中,是因为radiobutton.text给出了radiobutton的文本标签,我相信您有一个radiobutton表示“是”,一个radiobutton表示“否”,对吗

我在表格中将其设置为文本,最好的方法是什么?然后,与nvarchar相同,但使用文本类型。对于boolean,我会使用bit。事实上,在数据库中将boolean保存为文本类型是最糟糕的选择。单个布尔值的权重很小,但文本类型为存储通常较大的注释保留了大量空间,因此如果表较大,则会浪费大量空间。如果我的答案对您有用,并且您的问题得到解决,请单击“我的答案”下的勾号以奖励我,并向可能浏览类似问题的其他用户明确说明解决方案。