2013-05-16 3 views
-1

У меня есть gridview, в котором я устанавливаю флажок на check_changed, даже я пишу следующие коды, чтобы получить значение Идентификатора проблемы, как указано на изображении, также отображающее значения в текстовом поле, но когда я использую эти строки в SQL:Преобразование строки в целое число в asp.net

Select * from IssueBook Where IssueId IN (values) 

Это показывает ошибку преобразования VARCHAR в числовой на check_changed я пишу эти коды я имею принять IssueId (числовой)

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, с разделителем запятой?

+0

Как выглядит ваш код для SQL-запроса и где именно происходит ошибка? Я не думаю, что это весь код. – LittleBobbyTables

ответ

1

Инструкция IN требует список значений, разделенных запятыми, а не «строку» с этими значениями.

Вы должны создать динамический SQL и передать его в Command (SqlCommand или любой другой метод, который используется для выполнения SQL) ... что-то вроде: (Если вы используете SqlClient)

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

Надежда это помогает.

+0

Многие из многих Спасибо, моя проблема решена и работает нормально. –

+0

он теперь работает Спасибо за ответ –

0

Как насчет использования Convert.ToInt32(); функции

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

+0

Я не думаю, что проблема заключается в преобразовании в целое число; проблема в том, что они пытаются использовать список номеров с разделителями-запятыми в специальном SQL-запросе, и они не показали нам полный код. – LittleBobbyTables

0

Попробуйте использовать

Integer.Parse() 

или

Integer.TryParse() 

Надеются, что это работает.

0

Вы не можете преобразовать строку «4,5,6» в одно целое значение.

Ваш лучший выбор - изменить выбор, чтобы принять значение varchar.

0

В этом случае, чтобы избежать инъекции sql и до тех пор, пока ваши идентификаторы (значения ячеек (1) .Text) являются целыми числами, вы должны собирать свои идентификаторы из ячеек и вводить их в целочисленный список, а затем присоединяться к ним с запятой в строку в конце

Я скорректировал ваш код соответствующим образом.

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 
+0

В вышеупомянутом скрипте есть два следующих erros:1 \t «Преобразование» - это тип и не может использоваться в качестве выражения. \t Ошибка Значение типа 'System.Collections.Generic.List (Of Integer)' не может быть преобразовано в '1-мерный массив String'. –

Смежные вопросы