2017-02-21 8 views
0

Мое веб-приложение состоит из списка URL-адресов, которые извлекают информацию из базы данных при нажатии. Приложение работает хорошо, используя следующую нестандартный хранимую процедуру подхода:Сохраненная процедура не отображает данные при нажатии URL-адреса

кода:

Retrieve the connection string stored in the Web.config file. 
     Dim connectionString As [String] = ConfigurationManager.ConnectionStrings("dbName_dbConnectionString").ConnectionString 
     Dim connection As New SqlConnection(connectionString) 
     connection.Open() 

     Dim mySQLQuery As String 
     Dim vID As String 

     vID = Request.QueryString("submittalList") 

     mySQLQuery = "SELECT submittalsInfo.CategoryID, submittalsInfo.url, submittalsInfo.headerName, submittalsInfo.FileName FROM submittals INNER JOIN submittalsInfo ON submittals.CategoryID = submittalsInfo.CategoryID WHERE (submittalsInfo.CategoryID = submittals.CategoryID) AND submittalsInfo.CategoryID = '" & vID & "' AND submittalsInfo.isActive = '1' ORDER BY submittalsInfo.FileName" 

     Dim myCommand As New SqlCommand(mySQLQuery, connection) 

     Dim myReader1 As SqlDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection) 

     While (myReader1.Read()) 
      showSubHeader.Text = myReader1.GetString(2).ToString + ":" 
      showurls.Text = showurls.Text + "<div>" + myReader1.GetString(1).ToString + "</div>" 

     End While 
     connection.Close() 

... Я пытаюсь произвести те же результаты, используя хранимую процедуру. Ниже моя установка:

магазин Процедура:

ALTER PROCEDURE [dbo].[showSubmittals] 

AS 
Begin 
    SELECT submittalsInfo.CategoryID, submittalsInfo.url, submittalsInfo.headerName, submittalsInfo.FileName FROM submittals INNER JOIN submittalsInfo ON submittals.CategoryID = submittalsInfo.CategoryID WHERE (submittalsInfo.CategoryID = submittals.CategoryID) AND submittalsInfo.CategoryID = '" & vID & "' AND submittalsInfo.isActive = '1' ORDER BY submittalsInfo.FileName 
END 

... и вот код я использую, чтобы назвать его:

'Retrieve the connection string stored in the Web.config file. 
    Dim connectionString As [String] = ConfigurationManager.ConnectionStrings("webname_dbConnectionString").ConnectionString 
    Dim connection As New SqlConnection(connectionString) 
    Dim myCommand As New SqlCommand() 
    myCommand.CommandType = CommandType.StoredProcedure 
    myCommand.CommandText = "showSubmittals" 
    myCommand.Connection = connection 
    Try 
     connection.Open() 
     Dim myReader1 As SqlDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection) 

     While (myReader1.Read()) 
      showSubHeader.Text = myReader1.GetString(2).ToString + ":" 
      showurls.Text = showurls.Text + "<div>" + myReader1.GetString(1).ToString + "</div>" 

     End While 
    Catch ex As Exception 
     Throw ex 
    Finally 
     connection.Close() 
     connection.Dispose() 
    End Try 

... Проблема я встретив что страница (URL) не дает никаких результатов при щелчке по URL. Ниже показано, как мой URL настроен, я пытаюсь для отображения результатов на странице showSubmittals.aspx, которая содержит серверный код (мой подход) я объяснил выше:

<asp:HyperLink ID="HyperLink1" runat="server" Text="Accessories" NavigateUrl="~/showSubmittals.aspx?submittalList=1" CssClass="submittalsLinks" /> 

Могу ли я пожалуйста некоторая помощь в том, как я могу выполнить эту задачу, используя подход хранимой процедуры? Заранее спасибо

+0

Сохраняет ли хранимая процедура данные при запуске в SSMS? Хранимая процедура с сервера SQL должна возвращать данные точно так же, как запрос. SQL-сервер не похож на Oracle; он не нуждается в контрольном курсоре. – Doug

+0

Вы пытались отлаживать и видеть, выполняется ли цикл while после выполнения команды? –

+0

Почему ваша хранимая процедура имеет синтаксис vb конкатенации строк? Вам нужно иметь параметр 'vId' в вашем сохраненном proc и передать его из кода. –

ответ

0

Ваш сохраненный процесс должен выглядеть следующим образом.

ALTER PROCEDURE [dbo].[showSubmittals] 
@vid NVARCHAR (255) // Use appropriate datatype for parameter 
AS 
Begin 
SELECT submittalsInfo.CategoryID, submittalsInfo.url, submittalsInfo.headerName, submittalsInfo.FileName FROM submittals INNER JOIN submittalsInfo ON submittals.CategoryID = submittalsInfo.CategoryID WHERE (submittalsInfo.CategoryID = submittals.CategoryID) AND submittalsInfo.CategoryID = @vid AND submittalsInfo.isActive = '1' ORDER BY submittalsInfo.FileName 
END 

И вам необходимо вызвать процедуру из кода следующим образом.

Dim connectionString As [String] = ConfigurationManager.ConnectionStrings("webname_dbConnectionString").ConnectionString 
Dim connection As New SqlConnection(connectionString) 

Dim vID As String 

vID = Request.QueryString("submittalList") 
Dim myCommand As New SqlCommand() 
myCommand.CommandType = CommandType.StoredProcedure 
myCommand.CommandText = "showSubmittals" 
myCommand.Parameters.Add ("@vid", vID) 
myCommand.Connection = connection 
Try 
    connection.Open() 
    Dim myReader1 As SqlDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection) 

    While (myReader1.Read()) 
     showSubHeader.Text = myReader1.GetString(2).ToString + ":" 
     showurls.Text = showurls.Text + "<div>" + myReader1.GetString(1).ToString + "</div>" 
    End While 
Catch ex As Exception 
    Throw ex 
Finally 
    connection.Close() 
    connection.Dispose() 
End Try 

Синтаксические ошибки Pardon. Я отправляю этот ответ с мобильного устройства.

+0

Спасибо! Я высоко ценю вашу помощь в решении этой проблемы. – user1724708

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