Как перенести данные со страницы aspx в хранимую процедуру? - PullRequest
1 голос
/ 17 мая 2011

Я должен создать отчет RDLC в asp.net.Для которого я пишу хранимую процедуру с использованием различных скалярных функций.У меня есть графический интерфейс, из которого я должен выбрать критерии и собирать данные в соответствии с этими критериями.Графический интерфейс здесь: enter image description here Я реализовал все случаи, такие как «Весь персонал», «Все службы» и т. Д., Но проблема возникает, когда мне нужно выбрать конкретные записи из списка и вывести данные в соответствии с этим.Например, я выбираю конкретные записи персонала из списка, и в моем отчете должны отображаться записи только с выбранными записями.Как я могу справиться с этим?Я имею в виду, когда я выбираю некоторые записи из списка, как я могу перенести эти записи в раздел where моей хранимой процедуры и как использовать ее там?

Я использую SQL SERVER 2008. Моя хранимая процедура:

USE [PC_Rewrite]

GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo]. [SpGetClients] (@orderBy varchar (50))

AS BEGIN - SET NOCOUNT ON добавлен для предотвращениядополнительные результирующие наборы из-за вмешательства в операторы SELECT.SET NOCOUNT ON;

-- 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

END

Любая помощь будет оценена.

Ответы [ 4 ]

1 голос
/ 17 мая 2011

, если ваша хранимая процедура выглядит примерно так:

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

Передача списка <> в хранимую процедуру SQL

0 голосов
/ 17 мая 2011

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 из [Resume] внутреннего объединения [Department] для [Resume] .DepartmentID = [Department] .DepartmentID, где [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 - идентификаторы, разделенные запятыми 'select * FROM tblSchool, где intSchoolId IN (' + @strId + ')'

================= Теперь это нормально?

0 голосов
/ 17 мая 2011

Я думаю, вы хотите передать свои критерии поиска в вашу процедуру магазина, верно? используйте что-то вроде этого ..

// в коде позади

CommandType.StoredProcedure;

// передать каждый параметр для ваших критериев, как показано ниже Command.Parameters.Add ("@ ID, SqlDbType.string) .Value = staff;
Command.Parameters.Add ("@ ID, SqlDbType.string) .Value = service;

// теперь в процедуре магазина объявить sql как varchar (200) set sql = "select * from tablename"

// проверка параметров пустые или имеет значение if (@ paraname1! = "") установить sql = sql + "где ... параметр1"; конец если

if (@ paraname2! = "") установить sql = sql + "где ... параметр2"; конец если


это то, что вы искали?

0 голосов
/ 17 мая 2011

Ваша хранимая процедура уже существует?Если да, то какие параметры вы должны использовать?Вы можете изменить хранимую процедуру по своему усмотрению?

Существует несколько вариантов вызова хранимой процедуры.Вот два: вы можете создать объект SqlCommand и настроить его на использование хранимой процедуры, а затем создать SqlParameters для различных предложений в предложении where.Например, параметр для каждой опции на показанном вами экране.В случае со списком вы можете передать строку с разделителями-запятыми, но это зависит от вашей схемы БД.

Другой метод - использовать Linq To Sql, перетащить спрок в конструктор и получить его.создайте для вас метод, а затем вызовите его с созданными параметрами метода.

Извините, что не конкретизирую, но на это влияет то, как работает хранимая процедура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...