-1

我有一个gridview,我在其中插入了一个复选框,check_changed即使我编写了以下代码来获取问题ID的值,如图像中提到的那样也在文本框中显示值,但是当我在SQL中使用这些字符串时:

Select * from IssueBook Where IssueId IN (values)

它显示错误将 varchar 转换为数字check_changed我写这些代码我有 IssueId (numeric)

Protected Sub CheckBox1_CheckedChanged1(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim x As String = ""
        For Each row As GridViewRow In GridView1.Rows
            Dim cb As CheckBox = row.FindControl("checkbox1")
            If cb IsNot Nothing AndAlso cb.Checked Then
                If x <> "" Then
                    x += ","
                End If
                x += row.Cells(1).Text
            End If
        Next
        RwId.Text = x
        Session("SelctdIsuedBokNo") = RwId.Text

在数据表中,我使用了数值。如何将上述代码转换为整数,例如4,5,6,使用逗号分隔符?

4

6 回答 6

1

IN 语句需要逗号分隔值的列表,而不是包含这些值的“字符串”。

您应该创建一个动态 SQL 并将其传递给您的命令(SqlCommand 或您用来执行 SQL 的任何方法)......类似于:(如果您使用的是 SqlClient)

SqlCommand cmd = new SqlCommand(String.Format("Select * from IssueBook Where IssueId IN ({0})", values), your_connection);

希望能帮助到你。

于 2013-05-16T13:13:48.463 回答
0

在这种情况下,为了避免 sql 注入,只要您的 ID(Cells(1).Text 值)是整数,您应该从单元格中收集您的 ID 并将它们安全地输入到整数列表中,然后用逗号将它们加入到字符串中结束

我已经相应地调整了你的代码。

Protected Sub CheckBox1_CheckedChanged1(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim Values As List(Of Integer)'your integer list of IDs 
    For Each row As GridViewRow In GridView1.Rows
        Dim cb As CheckBox = row.FindControl("checkbox1")
        If cb IsNot Nothing AndAlso cb.Checked Then
            Values.Add(Integer.convert(row.Cells(1).Text))'add the ID
        End If
    Next
    RwId.Text = String.Join(",", Values)'pull out the list into a comma delimited string eg "2,45,67,87"
    Session("SelctdIsuedBokNo") = RwId.Text
于 2013-05-16T17:43:08.703 回答
0

你可以使用一个数组:

http://msdn.microsoft.com/en-us/library/vstudio/wak0wfyt.aspx

并将值转换为整数

Integer.TryParse

http://www.dotnetperls.com/array-vbnet

于 2013-05-16T13:11:37.310 回答
0

尝试使用

Integer.Parse()

或者

Integer.TryParse()

希望它有效。

于 2013-05-16T13:12:33.330 回答
0

您不能将字符串“4,5,6”转换为单个整数值。

您最好的选择是将选择更改为接受 varchar 值。

于 2013-05-16T13:13:11.457 回答
0

Convert.ToInt32();使用功能怎么样

http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx

于 2013-05-16T13:08:58.273 回答