Вызов хранимой процедуры из .net

2

У меня есть хранимая процедура вроде этого:

CREATE PROCEDURE up_action
(@id int
,@group varchar(30)=''
,@nom varchar(30)=''
,@compte varchar(30)=NULL
)
 AS
BEGIN
DECLARE @chrono int
......
select @date=date from users where compte=@compte
INSERT INTO dialog
(numappel,auteur,commentaire,etape,etapews,operant)
VALUES
(@numappel,@nomprenom,@dialogue,14,14,@nomoperateur)
SET @chrono = SCOPE_IDENTITY()      
select 'chrono'=@chrono
END

Я хочу вызвать эту хранимую процедуру из приложения, написанного на С#, с возможностью дать параметры, разделенные (фактически их значения), и после этого получить в итоге набор записей rs, из которого я могу получить значение переменная типа rs ( "chrono" ).

Я знаю возможность создания каждого параметра и указания типа, имени, значения и т.д. Но мне нужен метод, похожий на ASP, потому что у меня есть процедуры со 100 параметрами...

Теги:
sql-server
ado.net
sql-server-2005

5 ответов

1
Лучший ответ

Итак, решение:

SqlCommand sqlCommand = new SqlCommand();
sqlCommand.CommandText = strQuery;
rdr = sqlCommand.ExecuteReader();
rdr.Read();
int chrono = Convert.ToInt32(rdr["chrono"])

И для 2 параметров

rdr.NextResult();
rdr.Read();
int str = Convert.ToInt32(rdr["str"]);

Спасибо всем за ваши ответы

  • 0
    Я не уверен, что вы все правильно поняли ... или, может быть, я вас неправильно понимаю. Но параметр - это то, что вы отправляете в качестве входных данных для хранимой процедуры (и что вы добавляете в коллекцию cmd.Parameters (см. Мой ответ выше)). Набор результатов - это то, что возвращается хранимой процедурой. Вам нужно только NextResult (), если возвращено несколько наборов результатов (что, я считаю, не относится к вашей процедуре).
6

Обычно, с POADO (Plain Old ADO.Net) вы делаете что-то вроде этого:

using (SqlConnection conn = new SqlConnection(myConnectionString))
using (SqlCommand cmd = conn.CreateCommand())
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "up_action"
    cmd.Parameters.AddWithValue("@group", group);
    cmd.Parameters.AddWithValue("@nom", nom);
    cmd.Parameters.AddWithValue("@compte", compte);
    conn.Open();
    using (SqlDataReader rd = cmd.ExecuteReader())
    {
        if (rd.Read())
        {
            chrono = rs["chrono"];
        }
    }
}

Но, как заметил Ричард, вы действительно лучше изучаете что-то вроде LINQ to SQL, так как этот wil генерирует метод для каждой хранимой процедуры (который автоматически имеет аргумент для каждого параметра вашей хранимой процедуры). Для получения дополнительной информации см. эту ссылку.

1

Erm, если вы хотите, чтобы задача упростила поиск чего-то типа LINQ to SQL.

0

Я предполагаю, что это процедура вставки/обновления... 100 параметров для меня слишком много, но если это то, что вам нужно, тогда вам может понадобиться посмотреть параметры таблицы (только для SQL 2008):

http://msdn.microsoft.com/en-us/library/bb675163.aspx

(Во-первых, я бы пошел с приведенным выше советом и посмотрел на ORM, например LINQ - это вызовет тяжелый подъем из проблемы)

0

Вы также можете посмотреть блок приложения доступа к данным в Enterprise Libray, поскольку это обеспечивает хорошие шаблоны для доступа к данным. Я также предлагаю вам снова взглянуть на ваши SP и посмотреть, можете ли вы их реорганизовать, 100 параметров звучат довольно чрезмерно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню