2015-12-26 7 views
2

У меня есть хранимая процедура поиска данных, которые отлично работает в SQL Server 2008.Выполнение хранимой процедуры с vb.net

Мой код хранимой процедуры:

ALTER PROCEDURE [dbo].[uspSearch] 
    @SurName NVarchar(20) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 
     SI.Surname,SI.FirstName,SI.MiddleName, SI.StudAddress , 
     SI.BirthDay, SI.Gender, SI.Nationality, SI.BirthPlace, 
     SI.TelNum, SI.SchoolWhereGraduated , 
     SI.DatesWhenGraduated, SI.SchoolLastAttended, 
     SI.Note, SI.StudImage, 
     PI.Father_FirstName, PI.Father_LastName, 
     PI.Father_MI, PI.Father_Occupation, 
     PI.Father_TelNUm, PI.Mother_FirstName, PI.Mother_LastName, 
     PI.Mother_MI, PI.Mother_Occupation, PI.Mother_TelNum, 
     PI.Contact_FirstName, PI.Contact_LastName, PI.Contact_MI, 
     PI.Contact_Mobile, PI.Contact_TelNum, 
     SH.SchoolYear, SH.Levels, SH.Section, SH.DateEnrolled 
    FROM 
     StudentInformation SI 
    JOIN 
     StudentHistory SH ON SI.StudentID = SH.StudentID 
    JOIN 
     ParentInformation PI ON PI.ParentID = SI.ParentID 
    WHERE 
     SI.Surname Like '%'+ @Surname+'%' 
END 

Моя проблема в том, когда я исполню ее из vb.net, он не возвращает никаких данных и не появляется сообщение об ошибке всякий раз, когда я нажимаю кнопку поиска.

Может ли кто-нибудь помочь мне решить эту проблему? Заранее спасибо.

Мой vb.net код

Dim cmd As New SqlCommand 
Dim da As New SqlDataAdapter 
Dim dt As New DataTable 
Dim i As Integer 
Dim a As New OpenFileDialog 

Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click 
     cn.Open() 

     Using cmd As New SqlClient.SqlCommand("dbo.uspSearch", cn) 
      cmd.Parameters.AddWithValue("@SurName", txtSearch.Text) 
      dt.Clear() 
      da.Fill(dt) 
      dgv1.RowTemplate.Height = 50 
      dgv1.DataSource = dt 
      For i As Integer = 0 To dgv1.Columns.Count - 1 
       If TypeOf dgv1.Columns(i) Is DataGridViewImageColumn Then 
        DirectCast(dgv1.Columns(i), DataGridViewImageColumn).ImageLayout = DataGridViewImageCellLayout.Stretch 
       End If 
      Next 
     End Using 
     cn.Close() 
    End Sub 
+0

Вы побежали этот срабатывать непосредственно в SQL со значением вы пытаетесь. Возможно, это одно из подключений ... – Codexer

+0

@codexer, да, я протестировал процедуру в sqlserver и дал мне правильный результат. но когда это не сработало в vb.net –

ответ

1

У вас должно быть что-то вроде этого

Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click 
      cn.Open() 

      Using cmd As New SqlClient.SqlCommand("dbo.uspSearch", cn) 
       cmd.Parameters.AddWithValue("@SurName", txtSearch.Text) 
       cmd.CommandType=CommandType.StoredProcedure 
       dt.Clear() 
       da.Fill(dt) 
       dgv1.RowTemplate.Height = 50 
       dgv1.DataSource = dt 
       For i As Integer = 0 To dgv1.Columns.Count - 1 
        If TypeOf dgv1.Columns(i) Is DataGridViewImageColumn Then 
         DirectCast(dgv1.Columns(i), DataGridViewImageColumn).ImageLayout = DataGridViewImageCellLayout.Stretch 
        End If 
       Next 
      End Using 
      cn.Close() 
     End Sub 

UPDATE

Вы можете переписать

Dim cmd As New SqlCommand() 
Dim da As New SqlDataAdapter() 
Dim dt As New DataTable() 
Try 
    cn.Open() 
    cmd = New SqlCommand("uspSearch", cn) 
    cmd.Parameters.AddWithValue("@SurName", txtSearch.Text) 
    cmd.CommandType = CommandType.StoredProcedure 
    da.SelectCommand = cmd 
    da.Fill(dt) 
    dgv1.DataSource = dt 
Catch x As Exception 
    MessageBox.Show(x.GetBaseException().ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error]) 
Finally 
    cmd.Dispose() 
    cn.Close() 
End Try 
+0

Я пробую ваши предложения, но все равно не отвечаю на код. Я думаю, проблема в коде vb.net –

+0

Но вы не связали свой da с cmd. Итак, как вы можете заполнить dt? – Hemal

+0

Могу ли я спросить, правильна ли эта строка для поиска? 'code cmd.Parameters.AddWithValue (" @ SurName ", txtSearch.Text)' code –

2

Вы должны сообщить SqlCommand, что вы устанавливаете имя хранимой процедуры в свойстве CommandText

Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click 
    cn.Open() 
    Using cmd As New SqlClient.SqlCommand("dbo.uspSearch", cn) 
     ' add this line' 
     cmd.CommandType = CommandType.StoredProcedure 
     Dim da = new SqlDataAdapter(cmd) 
     Dim dt = new DataTable() 
     da.Fill(dt) 
     .... 

    End Using 
    cn.Close() 
End Sub 

по умолчанию для CommandType является текст, поэтому ожидается, что строка, используемая для текста команды, - это SELECT/INSERT/UPDATE и т. д. ... не имя StoredProcedure

+0

Я пробую ваши предложения, но все равно не отвечаю. Кнопка поиска не работает. –

+0

Где вы строите эту переменную da? При правильном подключении к команде для выполнения он ничего не мог сделать или что-то еще было вашей предыдущей командой, ответьте обновленно – Steve

+0

«код Dim da As New SqlDataAdapter» код –

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