2017-02-21 6 views
0

私のWebアプリケーションは、クリックするとデータベースから情報を取得する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'を持って、コードから渡す必要があります。 –

答えて

0

保存されたprocは次のようになります。

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

関連する問題