呼叫从.NET

问题描述:

一个存储过程我有这样一个存储过程:呼叫从.NET

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 [email protected] 
INSERT INTO dialog 
(numappel,auteur,commentaire,etape,etapews,operant) 
VALUES 
(@numappel,@nomprenom,@dialogue,14,14,@nomoperateur) 
SET @chrono = SCOPE_IDENTITY()  
select 'chrono'[email protected] 
END 

我想从C#编写与给由分隔的参数(实际可能性的应用程序调用此存储过程它们的值),并在那之后最终接收一个记录集rs,从中我可以得到像rs(“chrono”)这样的变量的值。

我知道与创建各项参数,并告诉类型,名称,值等 的可能性,但我要像在ASP的方法,因为我有100个参数的程序...

所以..解决办法是:

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()。 – fretje 2009-06-17 13:38:03

呃,如果你希望让任务更容易看起来像LINQ to SQL。

通常情况下,用POADO(普通老式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到SQL,因为这港岛线产生每个存储过程的一种方法(每个存储过程的参数自动有一个参数)。有关更多信息,请参阅this link

您可能还想看看Enterprise Libray中的数据访问应用程序块,因为这提供了良好的数据访问模式。我还建议你再看看你的SP,看看你是否可以重构它们,100个参数听起来相当过分。

我想这是一个插入/更新过程... 100个参数听起来对我来说太多了,但如果这是你需要的,那么你可能想看一下表值参数(仅适用于SQL 2008):

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

(首先,虽然,我会跟上面的建议去看看像LINQ的ORM - 这会采取繁重出了问题)