关于传输存储过程变量问题,变量值没变,但却不能显示(在线等待)

shenanigan 2004-08-30 02:47:14
代码:
void BindGrid()
{
string ProductID = "";

for (int i = 0;i<Request.Cookies.Count-1;i++)
{
if(ProductID == "")
ProductID = Request.Cookies[i].Value.ToString() ;
else
{
ProductID = ProductID + "," + Request.Cookies[i].Value.ToString();
}
}

String MyConnectionString = ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection MyConnection = new SqlConnection(MyConnectionString);
MyConnection.Open();
SqlDataAdapter MyDataAdapter = new SqlDataAdapter();
DataSet MyDataSet = new DataSet();
SqlCommand MySelectCommand = new SqlCommand();
MySelectCommand.CommandText = "[M_User_ShoppingCar]";
MySelectCommand.CommandType = CommandType.StoredProcedure;
MySelectCommand.Parameters.Add("@ProductID",ProductID);

SqlParameter Parameter=MySelectCommand.Parameters.Add("@result",SqlDbType.VarChar,20);
Parameter.Direction=ParameterDirection.Output;


MySelectCommand.Connection = MyConnection;
MyDataAdapter.SelectCommand = MySelectCommand;
MyDataAdapter.Fill(MyDataSet,"M_User_ShoppingCar");
MyDataGrid.DataSource = MyDataSet.Tables["M_User_ShoppingCar"].DefaultView;
MyDataGrid.DataBind();
MyConnection.Close();
Response.Write(MySelectCommand.Parameters["@result"].Value.ToString());


}


存储过程:

CREATE proc M_User_ShoppingCar
@ProductID varchar(100),
@result varchar(20) output
as

select ProductID,ProductName,OldPrice,NewPrice from T_Products where ProductID in (@ProductID)
set @result = @ProductID
GO


问题:
当ProductID 只有一个值的时候(比如:1),datagrid显示正常;
当ProductID 大于一个值的时候(比日:1,2),datagrid显示失败,不报错,只有表头无记录集。
返回值result正确,ProductID 类型是varchar(50)。
...全文
245 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wycfylogin 2004-08-31
  • 打赏
  • 举报
回复
自己做的时候自己分割一下不就可以
shenanigan 2004-08-31
  • 打赏
  • 举报
回复
高手帮忙解决一下。
even1983(风之韵) 的方法可以使用,但运行速度在量大后会比较慢。
shenanigan 2004-08-30
  • 打赏
  • 举报
回复
存储过程如此:
CREATE proc M_User_ShoppingCar
@ProductID varchar(100),
@result varchar(20) output
as

select ProductID,ProductName,OldPrice,NewPrice from T_Products where ProductID in (@ProductID)
set @result = @ProductID
GO

参数@ProductID传进来的值是: 3','3','4 ,这样的存储过程应该怎么写?
shenanigan 2004-08-30
  • 打赏
  • 举报
回复
存储过程参数值是: '1','2','3'
在SQL server里面会在参数外面自动添加一对单引号,为什么会出现这种情况,如何把单引号去除?
andrawsky 2004-08-30
  • 打赏
  • 举报
回复
up
even1983 2004-08-30
  • 打赏
  • 举报
回复
将存储过程改为
select ProductID,ProductName,OldPrice,NewPrice from T_Products where
charindexset((ProductId+','),@ProductId) >= 0

但要求传入的参数是"1,2,3,"这种格式的(注意最后一个",")
qimini 2004-08-30
  • 打赏
  • 举报
回复
写错了一个地方
select ProductID,ProductName,OldPrice,NewPrice from T_Products where
ProductIDin (select ProductID from T_Products where
@ProductID)

代码未经调试,如有错误还请自行更正!!
qimini 2004-08-30
  • 打赏
  • 举报
回复
存储过程有问题,当@ProductID的值大于一个的时候(比如说“1”,“2”,“3”)
程序传进去其实是'1,2,3',而你想要的是'1','2','3'当然没有数据了

解决的方法如下:
1、存储过程
CREATE proc M_User_ShoppingCar
@ProductID varchar(100),
@result varchar(20) output
as

select ProductID,ProductName,OldPrice,NewPrice from T_Products where
ItemID in (select ItemID from books where
@ProductID)

GO

2、程序里
string ProductID = "";

for (int i = 0;i<Request.Cookies.Count-1;i++)
{
if(ProductID == "")
ProductID = "Product='"Request.Cookies[i].Value.ToString() +"'";
else
{
ProductID += "or Product='"Request.Cookies[i].Value.ToString() +"'"; }
}
shenanigan 2004-08-30
  • 打赏
  • 举报
回复
怎么我的帖子没人看啊。。。我急啊。。。

当ProductID 大于一个值的时候(比日:1,2)直接调试存储过程没有问题。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧