【问题标题】:How to take data from aspx page to stored procedure?如何将数据从 aspx 页面获取到存储过程?
【发布时间】:2023-03-18 22:28:02
【问题描述】:

我必须在 asp.net 中创建一个 RDLC 报告。为此,我正在使用不同的标量函数编写存储过程。 我有一个 GUI,我必须从中选择一个标准并根据该标准收集数据。图形用户界面在这里: 我已经实现了所有案例,例如“所有员工”、“所有服务”等,但是当我必须从列表框中选择特定记录并据此带来数据时,问题就来了。例如,我从列表中选择特定的员工记录,我的报告应显示仅具有该选定记录的记录。 我该如何处理?我的意思是当我从列表框中选择一些记录时,如何将这些记录带到我的存储过程的 where 子句中以及如何在那里使用它?

我正在使用 SQL SERVER 2008。 我的存储过程是:

USE [PC_Rewrite]

去 设置 ANSI_NULLS ON 走 设置 QUOTED_IDENTIFIER ON 走 更改程序 [dbo].[spGetClients] ( @orderBy varchar(50) )

作为 开始 -- 添加了 SET NOCOUNT ON 以防止额外的结果集 -- 干扰 SELECT 语句。 设置无计数;

-- Insert statements for procedure here
IF(@orderBy = 'Consumer Name')
BEGIN
    SELECT c.Id, c.LastName, c.FirstName, c.MiddleInit, 
    c.DateOfBirth, dbo.GetAge(c.DateOfBirth, GETDATE()) AS Age, c.Sex, cs.Status, ca.Address, co.Phone, 
    dbo.GetEthnicity(c.Id) AS Ethnicity, dbo.GetDevelopmentalDisabilities(c.Id) AS Disabilities, 
    dbo.GetClientStaffContacts(c.Id) AS Staff, dbo.GetClientContacts(c.Id) AS Contact, 
    dbo.GetClientInsuranceProviders(c.Id) AS InsuranceProvider FROM Client c 
    LEFT OUTER JOIN ClientStatus cs ON cs.Id = c.StatusId  
    LEFT OUTER JOIN(        
        SELECT ca.ParentEntityId, ca.Address
        FROM ContactAddress ca
        INNER JOIN EntityName en ON en.Id = ca.EntityNameId AND en.Name = 'Client' 
        INNER JOIN GeneralLookup gl ON ca.glAddressTypeId = gl.Id AND gl.LookupItem = 'Primary'    
    ) ca ON c.Id = ca.ParentEntityId 
    LEFT OUTER JOIN(        
        SELECT co.ParentEntityId, co.ContactData Phone
        FROM ContactOther co
        INNER JOIN EntityName en ON en.Id = co.EntityNameId AND en.Name = 'Client' 
        INNER JOIN GeneralLookup gl ON co.glContactTypeId = gl.Id AND gl.LookupItem = 'Home'    
    ) co ON c.Id = co.ParentEntityId 
    ORDER BY c.LastName, c.FirstName, c.MiddleInit
END

ELSE IF(@orderBy = 'Consumer Address')
BEGIN
    SELECT c.Id, c.LastName, c.FirstName, c.MiddleInit, 
    c.DateOfBirth, dbo.GetAge(c.DateOfBirth, GETDATE()) AS Age, c.Sex, cs.Status, ca.Address, co.Phone, 
    dbo.GetEthnicity(c.Id) AS Ethnicity, dbo.GetDevelopmentalDisabilities(c.Id) AS Disabilities, 
    dbo.GetClientStaffContacts(c.Id) AS Staff, dbo.GetClientContacts(c.Id) AS Contact, 
    dbo.GetClientInsuranceProviders(c.Id) AS InsuranceProvider FROM Client c 
    LEFT OUTER JOIN ClientStatus cs ON cs.Id = c.StatusId  
    LEFT OUTER JOIN(        
        SELECT ca.ParentEntityId, ca.Address
        FROM ContactAddress ca
        INNER JOIN EntityName en ON en.Id = ca.EntityNameId AND en.Name = 'Client' 
        INNER JOIN GeneralLookup gl ON ca.glAddressTypeId = gl.Id AND gl.LookupItem = 'Primary'    
    ) ca on c.Id = ca.ParentEntityId 
    LEFT OUTER JOIN(        
        SELECT co.ParentEntityId, co.ContactData Phone
        FROM ContactOther co
        INNER JOIN EntityName en ON en.Id = co.EntityNameId AND en.Name = 'Client' 
        INNER JOIN GeneralLookup gl ON co.glContactTypeId = gl.Id AND gl.LookupItem = 'Home'    
    ) co ON c.Id = co.ParentEntityId 
    ORDER BY ca.Address
END

结束

任何帮助将不胜感激。

【问题讨论】:

    标签: asp.net sql sql-server criteria user-defined-functions


    【解决方案1】:

    如果您的存储过程如下所示:

    Create PROCEDURE [dbo].[sp]
    @ID int
    AS
    BEGIN
        Select ID, Display, GroupID           
        From SystemTypes
        Where ID = @ID
    END
    

    那么你可以像这样设置ID参数:

    SqlCommand command = new SqlCommand("sp",connection);
    command.CommandType = CommandType.StoredProcedure;
    Command.Parameters.Add("@ID, SqlDbType.Int).Value = **VALUE**;
    conn.open();
    
    SqlDataReader reader = command.ExecuteReader();
    

    如果你想使用类似逗号分隔值的字符串。我找到了这个链接:

    http://www.outsightinteractive.com/blog/comma_delimited_list_as_stored_procedure_parameter

    http://www.4guysfromrolla.com/webtech/031004-1.shtml

    Passing List<> to SQL Stored Procedure

    【讨论】:

    • 我觉得这个link可以帮到我:
    • 第一个和第二个链接很棒......这些与我正在寻找的相同。非常感谢 Mithir。
    【解决方案2】:

    您的存储过程是否已经存在?如果是这样,是否有您必须使用的参数?您可以随意更改您认为合适的存储过程吗?

    关于如何调用存储过程有多种选择。这里有两个:您可以创建一个 SqlCommand 对象并将其设置为使用存储过程,然后为您的 where 子句中的各种子句创建 SqlParameters。例如,显示屏幕上每个选项的参数。对于列表框,您可以传入逗号分隔的字符串,但这取决于您的数据库架构。

    另一种方法是使用Linq To Sql并将sproc拖放到设计器上并让它为您创建一个方法,然后使用生成的方法参数调用它。

    很抱歉没有更具体,但它受存储过程工作方式的影响。

    【讨论】:

    • 我可以将列表框选定项的逗号分隔列表作为参数发送到存储过程,但问题是,如何在我的 SP 的 where 子句中使用该字符串。
    【解决方案3】:

    我认为您想将搜索条件传递给您的存储过程,对吗? 使用这样的东西..

    //在代码后面

    CommandType.StoredProcedure;

    //为您的标准传递每个参数,如下所示 Command.Parameters.Add("@ID, SqlDbType.string).Value = 员工;
    Command.Parameters.Add("@ID, SqlDbType.string).Value = service;

    //现在在存储过程中 将 sql 声明为 varchar(200) set sql = "select * from tablename"

    //检查参数是否为空或有值 if(@paraname1 != "") 设置 sql = sql + "where...parameter1"; 结束如果

    if(@paraname2 != "") 设置 sql = sql + "where...parameter2"; 结束如果


    这就是你要找的东西?

    【讨论】:

    • 我可以轻松地将搜索条件传递给 SP。但我不知道如何在 where 子句中使用该标准。我将传递一个像“abc,def,ghi...”这样的字符串。如何在 where 子句中使用它。就像 Staff.Name = 'abc' 或 Staff.Name = 'def' 或 Staff.Name = 'ghi'
    • 然后请找到我的另一个答案//
    【解决方案4】:

    set @query = '选择 Resume.ResumeID,Resume.Name,Resume.DepartmentID,Department.DepartmentName, Resume.CurrentCompany ,Resume.CurrentLocation ,Resume.Phone,Resume.Email, Resume.KeySkills,Resume.TotalExpYears,Resume.TotalExpMonths,Resume.CandidateTextResume,Resume.ResumeStatus, Resume.IsActive from [Resume] inner join [Department] on [Resume].DepartmentID=[Department].DepartmentID where [Resume].IsActive =1 '

    if(@DepartmentName != '')
    begin 
            select  @query = @query + ' And [Department].DepartmentName like ''%'  + @DepartmentName + '%'''
    end  
    
    if(@TotalExpYears != '')
    begin 
            select  @query = @query + ' And TotalExpYears like ''%'  + @TotalExpYears + '%'''
    end  
    
    if(@TotalExpMonths != '')
    begin 
            select  @query = @query + ' And TotalExpMonths like ''%'  + @TotalExpMonths + '%'''
    end
    
    if(@KeySkills != '')
    begin 
            select  @query = @query + ' And KeySkills like ''%'  + @KeySkills + '%'''
    end
    
    if(@CurrentLocation != '')
    begin 
            select  @query = @query + ' And CurrentLocation like ''%'  + @CurrentLocation + '%'''
    end
    
    if(@CandidateTextResume != '')
    begin 
            select  @query = @query + ' And CandidateTextResume like ''%'  + @CandidateTextResume + '%'''
    end
    
    if(@CurrentCompany != '')
    begin 
            select  @query = @query + ' And CurrentCompany like ''%'  + @CurrentCompany + '%'''
    end
    if(@ResumeStatus != '')
    begin
        select  @query = @query + ' And ResumeStatus like ''%'  + @ResumeStatus + '%'''
    end
    

    =============== @strId as varchar(100)//strId 是逗号分隔的 id 'select * FROM tblSchool where intSchoolId IN ('+ @strId +')'

    ================== 现在好了吗?

    【讨论】:

    • 我不明白它如何满足我的要求?我的意思是作为参数发送给 SP 的逗号分隔字符串在哪里?
    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    相关资源
    最近更新 更多