我有一个这样的存储过程:
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(“chrono”)。
我知道创建每个参数并告诉类型,名称,值等的可能性。 但我想要一个类似ASP的方法,因为我有100个参数的程序......
答案 0 :(得分: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这样的东西,因为这会为每个存储过程生成一个方法(它会自动为你的存储过程的每个参数设置一个参数)。有关详细信息,请参阅this link。
答案 1 :(得分:1)
如果你想让这个任务更容易看看像LINQ to SQL这样的东西。
答案 2 :(得分: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"]);
谢谢大家的回答
答案 3 :(得分:0)
您可能还想查看Enterprise Libray中的数据访问应用程序块,因为这为数据访问提供了良好的模式。我还建议你再看看你的SP,看看你是否可以重构它们,100个参数听起来相当多。
答案 4 :(得分:0)
我想这是一个插入/更新程序... 100个参数听起来对我来说太多了,但如果这是你需要的,那么你可能想查看表值参数(仅限SQL 2008):
http://msdn.microsoft.com/en-us/library/bb675163.aspx
(首先,我会接受上述建议并看一下像LINQ这样的ORM - 这将解决问题的重大问题)