呼叫从.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"]);
谢谢大家对你的答案
答
呃,如果你希望让任务更容易看起来像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。
答
我想这是一个插入/更新过程... 100个参数听起来对我来说太多了,但如果这是你需要的,那么你可能想看一下表值参数(仅适用于SQL 2008):
http://msdn.microsoft.com/en-us/library/bb675163.aspx
(首先,虽然,我会跟上面的建议去看看像LINQ的ORM - 这会采取繁重出了问题)
我不知道你的理解是正确的...也许我误解你了。但是一个参数就是你作为输入发送给存储过程(以及你添加到cmd.Parameters集合的东西(参见上面的答案))。结果集是存储过程返回的内容。如果返回多个结果集(我认为您的过程不是这种情况),则只需要NextResult()。 – fretje 2009-06-17 13:38:03