Вызов хранимой процедуры из .net - PullRequest
2 голосов
/ 17 июня 2009

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

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

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

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

Ответы [ 5 ]

6 голосов
/ 17 июня 2009

Обычно, с 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, поскольку это создаст метод для каждой хранимой процедуры (который автоматически имеет аргумент для параметра вашей хранимой процедуры). См. эту ссылку для получения дополнительной информации.

1 голос
/ 17 июня 2009

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

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"]);

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

1 голос
/ 17 июня 2009

Эмм, если вы хотите упростить задачу, посмотрите что-то вроде LINQ to SQL.

0 голосов
/ 17 июня 2009

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

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

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

0 голосов
/ 17 июня 2009

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

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