从.net调用存储过程

Rox*_*ana 2 .net c# sql-server ado.net sql-server-2005

我有一个这样的存储过程:

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
Run Code Online (Sandbox Code Playgroud)

我想从一个用C#编写的应用程序中调用这个存储过程,可以将参数分隔开(实际上是它们的值),然后最后接收一个记录集rs,我可以从中获取变量的值,如rs ( "计时").

我知道创建每个参数并告诉类型,名称,值等的可能性.但我想要一个类似于ASP的方法因为我有100个参数的程序...

fre*_*tje 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"];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但正如理查德所指出的那样:你确实最好看看像LINQ to SQL这样的东西,因为这会为每个存储过程生成一个方法(它会自动为你的存储过程的每个参数设置一个参数).有关更多信息,请参阅此链接.