存储过程接收多个参数问题 高手请进
用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 "; //这里改了一行数据,你可以通过循环修改多行