日期:2014-05-20  浏览次数:20401 次

存储过程接收多个参数问题 高手请进
用DataList做了个图片列表   想把选中的图片添加到专辑中
for   (int   i   =   0;   i   <   DataList1.Items.Count;   i++)//循环DataList1的集合
{
        if(   xx.checked)//如果图片被选中
            {
                  int   id=e.Item.FindControl( "label1 ")//取出这个图片的ID
                  int   classid=1//专辑id
                  ...........................//执行存储过程
            }
}

这是我的实现方法   这样循环判断哪个图片选中     如果选中   就把图片id   和专辑ID传到存储过程里   执行一次。如果有10个被选中了   就这个循环就执行10次存储过程   这样就修改了10条图片
如何做才能执行一次存储过程就把这10条数据修改。存储过程里应该怎么写

大侠们最好帖些代码。本人小菜鸟

------解决方案--------------------
存储过程可以接收多个参数,但参数数目是固定的。 有另外一个办法就是. 传一个字串。然后在存储过程中拆分。然生成sql 再exec 这个sql.
------解决方案--------------------
拆分字符串!
------解决方案--------------------
当然简单的办法是在程序中生成sql而不是用存储过程做。
------解决方案--------------------
create or replace type mytable as table of varchar2(1000);

调用mytable
------解决方案--------------------
CREATE PROCEDURE Test
@idString NVARCHAR(1000)
AS
DECLARE @sql NVARCHAR(2000)

SET @sql = "UPDATE Images SET 是否专辑=1 WHERE (ImageID IN ( ' " + @idStrings + " ') "

exec @sql


@idStrings从你上面的代码组合,形式如下:
imgeid1,imageid2,imageid3
------解决方案--------------------
如果传入的个数比较多,合并字符串自负长度超过4000,考虑使用Xml

------解决方案--------------------
楼上 ok
------解决方案--------------------
lhcoolhacker(hugh-lin)

CREATE PROCEDURE Test
@idString NVARCHAR(1000)
AS
DECLARE @sql NVARCHAR(2000)

SET @sql = "UPDATE Images SET 是否专辑=1 WHERE (ImageID IN ( ' " + @idStrings + " ') "

exec @sql


@idStrings从你上面的代码组合,形式如下:
imgeid1,imageid2,imageid3

------解决方案--------------------
要用存储过程更新不定的数据内容最好用DataAdpater + DataSet

------解决方案--------------------
SqlDataAdapter catDA = new SqlDataAdapter( "SELECT CategoryID, CategoryName FROM Categories ", nwindConn);
catDA.UpdateCommand = new SqlCommand( "UPDATE Categories SET CategoryName = @CategoryName " +
"WHERE CategoryID = @CategoryID " , nwindConn);

catDA.UpdateCommand.Parameters.Add( "@CategoryName ", SqlDbType.NVarChar, 15, "CategoryName ");

SqlParameter workParm = catDA.UpdateCommand.Parameters.Add( "@CategoryID ", SqlDbType.Int);
workParm.SourceColumn = "CategoryID ";
workParm.SourceVersion = DataRowVersion.Original;

DataSet catDS = new DataSet();
catDA.Fill(catDS, "Categories ");

DataRow cRow = catDS.Tables[ "Categories "].Rows[0];
cRow[ "CategoryName "] = "New Category "; //这里改了一行数据,你可以通过循环修改多行