我在 Sql Server 2005 数据库中创建了一个存储过程sp_UpdateRate
,在我的C#应用程序中,我有一个包含多个速率的十进制数组。现在,我想将该数组传递给我的存储过程。数组的长度不是静态的。我该怎么做呢。 sql参数中是否有任何数组类型?
这是我的代码:
decimal[] rates = new decimal[lst.Items.Count]; //lst is the ListBox control that containing list of rate.
for (int i=0;i<lst.Items.Count;i++)
{
rates[i]=Convert.ToDecimal(lst.Items[i]);
}
SqlCommand cmd = Cnn.CreateCommand; //Cnn is the SqlConnection class object
cmd.CommandText = "sp_UpdateRate";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
我的存储过程就在这里
Alter Procedure sp_UpdateRate(@rate decimal(9,2))
AS
BEGIN
--I want to Update my rates here.
Update tblRate SET LastUpdate=GetDate(), NewRate=(@rate * 1.658) Where rate=@rate
END
答案 0 :(得分:2)
如果您使用的是更高版本,则可以使用表值参数。但是在2005年没有。但是有一个技巧可以完成这项工作,你可以在触发器中“托管”你的存储过程代码,inserted
表扮演表参数的角色。
现在,您始终可以选择传递逗号分隔的字符串并将其解析为存储过程中的表。
Here is a reference到之前的那个。
答案 1 :(得分:2)
从SQL Server 2008开始,您可以传递表变量...
不幸的是,你仍然使用SQL 2005.如果可以的话,我会建议升级到SQL Server 2008.如果这不是一个选项,你可以使用XML数据类型。
Problem passing XML Parameter to SQL Server Stored Procedure
希望有帮助...没有xml数据类型......好旧的SQL 2000天......你必须这样做...... http://www.codeproject.com/Articles/7485/Inserting-XML-formatted-data-into-SQL-Server-2000
甚至在此之前......您可以使用CSV(字符串)然后使用拆分功能(found here)。
答案 2 :(得分:0)