0

SQL 2012 ストアド プロシージャに次のものがあります。

V.VoterID IN (SELECT VoterID FROM vts_tbVoterAnswers WHERE AnswerID=@Seed)

@Seed はストアド プロシージャ内の整数変数であり、ddlSeed という名前の ASP フォーム フィールドから与えられた値と等しいはずです。

SQL 変数とフォーム フィールドの値を関連付けるにはどうすればよいですか?

編集:あなたは正しい@HeavenCoreです。私の質問は漠然としているようです。申し訳ありません。これはフォームコードです:

<%@ Page Language="c#" MasterPageFile="MsterPageTabs.master" AutoEventWireup="false"%>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"><table summary="maintable" class="TableLayoutContainer">
<tr>
<td class="contentCell" valign="top">
<table summary="exporttable" class="innerText">
<tr>
<td>
<table summary="exporttypetable" class="innerText">
<asp:PlaceHolder ID="CSVOptionPlaceHolder" runat="server">
</asp:PlaceHolder>
<tr>
<td width="155">
<br /><strong>
<asp:Literal ID="SeedLabel" runat="server" EnableViewState="False">Seed : </asp:Literal></strong>
</td>
<td>
<asp:DropDownList ID="ddlSeed" runat="server">
<asp:ListItem Value=""> All </asp:ListItem>
<asp:ListItem Value="32"> Yes </asp:ListItem>
<asp:ListItem Value="31"> No </asp:ListItem>
</asp:DropDownList></td></tr></table>
</td></tr></table>
<asp:Button ID="ExportDataButton" runat="server" Text="Export CSV"></asp:Button></td></tr>
</table>
</asp:Content>

基本的には、ユーザーがドロップダウン メニューから選択して送信できるようにすることです。ドロップダウン リストの各オプションには値が保持されます。

[empty] すべての場合 はいの場合 32 いいえの場合 31

これを送信した後、ドロップダウン リストの値は、次のストアド プロシージャの SQL 変数@Seedの値になります。

USE [SurveyDB20652]
GO

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
/// <summary>
/// Return the data needed to export a CSV  file
/// </summary>
*/
ALTER PROCEDURE [dbo].[vts_spVoterExportCSVData]
                @SurveyID int,
                @StartDate datetime,
                @EndDate datetime,
                @Seed int
AS

SELECT  SUBSTRING(Q.QuestionText,1,20) as QuestionText,Q.QuestionId,
 AnswerID,SelectionModeId,AnswerTypeId, 
SUBSTRING(Q.QuestionText,1,20)+'...'+' | '+ AnswerText   as ColumnHeader ,
AnswerText,
Q.DisplayOrder QuestionDisplayOrder,
Q.QuestionId,
Q.Alias QuestionAlias,
Q.QuestionIdText QuestionIdText,
A.DisplayOrder AnswerDisplayOrder,
A.AnswerId ,
A.AnswerAlias,Q.ParentQuestionid,
    case when q.parentQuestionId is null then null
    else (select count(*)+1 from vts_tbquestion q1 
             where q1.parentquestionid=q.parentquestionid
             and   q1.questionid<q.questionid
             ) 
    end as roworder,
    case when q.parentQuestionId is null then null
    else (select QuestionText from vts_tbquestion q1 
             where q1.questionid=q.parentquestionid
             ) 
    end as ParentQuestiontext,
    case when q.parentQuestionId is null then null
    else (select QuestionIdText from vts_tbquestion q1 
             where q1.questionid=q.parentquestionid
             ) 
    end as ParentQuestionIdtext,
    case when q.parentQuestionId is null then null
    else (select ALIAS from vts_tbquestion q1 
             where q1.questionid=q.parentquestionid
             ) 
    end as ParentQuestionAliastext,
A.AnswerIDText AnswerIdText
 FROM vts_tbQuestion Q
INNER JOIN vts_tbAnswer A
    ON A.QuestionID = Q.QuestionID
WHERE 
    SurveyID = @SurveyID  
ORDER BY Q.DisplayOrder, Q.QuestionID, A.DisplayOrder

SELECT
    V.VoterID,
    V.VoteDate,
    V.StartDate,
    V.IPSource,
    V.ContextUserName as username,
    (SELECT sum(ScorePoint) FROM vts_tbVoter 
        INNER JOIN vts_tbVoterAnswers
            ON vts_tbVoterAnswers.VoterID = vts_tbVoter.VoterID
        INNER JOIN vts_tbAnswer
            ON vts_tbAnswer.AnswerID = vts_tbVoterAnswers.AnswerID
        WHERE vts_tbVoter.VoterID = V.VoterID) AS Score
    FROM vts_tbVoter V
    WHERE 
        V.SurveyID = @SurveyID AND
        V.Validated <> 0 AND
        DATEDIFF (d,@startDate,V.VoteDate) >= 0 AND DATEDIFF (d,@endDate,V.VoteDate) <= 0 AND
        V.VoterID IN (SELECT VoterID FROM vts_tbVoterAnswers WHERE AnswerID=@Seed)
    ORDER BY V.VoterID DESC

SELECT
    V.VoterID,
    VA.AnswerID,
    SectionNumber,
    VA.AnswerText,
    AnswerTypeId,
    SelectionModeId,
    Q.QuestionId,
    A.AnswerText AnswerAnswerText,
    A.DisplayOrder AnswerDisplayOrder,
A.AnswerAlias,
A.AnswerIDText AnswerIdAlias
FROM vts_tbVoterAnswers VA
INNER JOIN vts_tbVoter V
    ON V.VoterID = VA.VoterID
INNER JOIN vts_tbAnswer A
    ON VA.AnswerId=A.AnswerId
INNER JOIN vts_tbQuestion Q
     ON A.QuestionId=Q.QuestionId
WHERE 
    V.SurveyID = @SurveyID AND
    V.Validated <> 0 AND
    DATEDIFF (d,@startDate,V.VoteDate) >= 0 AND DATEDIFF (d,@endDate,V.VoteDate) <= 0 AND
    V.VoterID IN (SELECT VoterID FROM vts_tbVoterAnswers WHERE AnswerID=@Seed)


ORDER BY V.VoterID DESC

上記の手順は、基本的にフィルターとして機能します。これは、vts_tbVoterAnswers テーブルに VoterID エントリがないすべてのデータベース エントリを除外します。これには、@Seed の値 ('' または 32 または 31 のいずれか) に等しい対応する AnswerID エントリがあります。

したがって、ドロップダウン リストで [すべて] を選択すると、 @Seed='' : テーブル vts_tbVoterAnswers のすべてのエントリが選択されます [はい] を選択すると、 @Seed='32': VoterID 120 とそのすべてのエントリが除外されます[いいえ] を選択すると、 @Seed='31' : VoterID 109 とそのすべてのエントリが除外されます

vts_tbVoterAnswers テーブルは次のようになります。

VoterID | AnswerID | SectionNumber | AnswerText

109     | 3        | 0             | 12/03/2000

109     | 23       | 0             | NULL

109     | 32       | 0             | NULL

120     | 3        | 0             | 26/11/1979

120     | 23       | 0             | NULL

120     | 31       | 0             | NULL

だから私の問題は、@Seer SQL変数をドロップダウンリストで指定された値に接続する方法です.. :)

この説明が以前の説明よりも優れていることを願っています。:)

4

1 に答える 1

0

あなたの質問は非常に漠然としています、

@Seed が proc のパラメーターであると仮定します。あなたのprocがusp_GetVotesと呼ばれると仮定します

ASP からプロシージャを呼び出して、フォームの値をパラメータに渡します。

'#### Make sure you have adovbs.inc

'#### Ready objects
Set db = CreateObject("ADODB.Connection") 
set dbc = CreateObject("ADODB.Command") 

'#### Connect to SQL
db.Open "YourConnectionString"

'#### Build & Execute Command
With dbc
    .ActiveConnection = db
    .CommandText = "vts_spVoterExportCSVData" 
    .CommandType = adCmdStoredProc
    .Parameters.Append .CreateParameter("@Seed", adInt, adParamInput, , request.form("ddlSeed"))
    set rs = .Execute 
End With

または、非常に迅速で汚れたい場合は、次のようにします。

set rs = db.execute("EXEC vts_spVoterExportCSVData @Seed = " & replace(request.form("ddlSeed"),"'","''"))

編集 1: 明確な質問の C# バージョン:

SqlConnection db = new SqlConnection(YourConnectionString);
SqlCommand dbc = new SqlCommand("vts_spVoterExportCSVData", db);
dbc.CommandType = CommandType.StoredProcedure;

SqlParameter Seed = dbc.Parameters.Add("@Seed", SqlDbType.Int);
Seed.Direction = ParameterDirection.Input;
Seed.Value = request.form("ddlSeed");
db.Open();

SqlDataReader Results = dbc.ExecuteReader();

while (Results.Read())  {
    //Results["VoterID"].ToString();
    //Results["AnswerID"].ToString();
    //Results["SectionNumber"].ToString();
    //Results["AnswerText"].ToString();
};

Results.Close();
于 2012-09-19T08:48:25.993 に答える