2016-09-09 4 views
0

все, как я могу прочитать курсор из хранимой процедуры?Курсор SQL Server на vb.net

Это мой код, но он не работает

Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("conexionBD").ToString()) 
Public Function LoadData() As String 

    Dim strQuery As String 
    strQuery = "Kardex_P''" 

    Using (con) 
     Dim sqlComm As SqlCommand = New SqlCommand(strQuery, con) 

     con.Open() 

     Dim sqlReader As SqlDataReader = sqlComm.ExecuteReader() 

     If sqlReader.HasRows Then 
      While (sqlReader.Read()) 
       txtReporte = sqlReader.ToString 
      End While 
     End If 

    End Using 

    Return txtReporte 
End Function 

Пожалуйста, мне нужна ваша помощь.

Заранее спасибо

+4

Прекратите тратить время на чтение из работы курсора - вместо этого сосредоточьтесь на **, исключая ** курсор в целом! В 95% случаев вам ** не нужен ** курсор, действительно! И вы не должны использовать его, если только вам не обязательно ... –

+4

Что означало marc_s x 10 000 при изменении 95% до 98.99% :) –

+0

Что не работает в коде выше, чтобы заставить вас думать, что курсор разрешит? – Steve

ответ

0

Код курсор будет жить в хранимой процедуре, которая в конечном счете возвращает набор строк для чтения. Ссылочная каждого столбца по порядковому значению или имя:

txtReporte.Text = sqlReader(0).ToString() 

или

txtReporte.Text = sqlReader("YourColumnName").ToString() 
0

Что случилось в OP коде и как это исправить.

Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("conexionBD").ConnectionString 
''//.ToString()) wrong but not fatal 
Public Function LoadData() As String 
    Dim txtReporte as String = "" ''//you return this so declare 

    Dim strQuery As String 
    strQuery = "Kardex_P" ''//"Kardex_P''" This supposed to be SP name. What '' do inside? 

    Using (con) ''//this is good 
     Dim sqlComm As SqlCommand = New SqlCommand(strQuery, con) 
     ''//By default command type is text so next line is critical 
     sqlComm.CommandType = CommandType.StoredProcedure 
     con.Open() 

     Dim sqlReader As SqlDataReader = sqlComm.ExecuteReader() 

     ''//If sqlReader.HasRows Then checking "HasRows is redundant here 
      While (sqlReader.Read()) 
       ''//txtReporte = sqlReader.ToString no comment 
       txtReporte &= sqlReader("SomeField") 
      End While 
     ''//End If 
     con.Close() ''//cleanup recommended 
    End Using 

    Return txtReporte 
End Function 

Надеюсь, это сработает. Конечно, не идеальный.