【发布时间】:2013-11-04 16:15:27
【问题描述】:
我有这个存储过程:
ALTER PROCEDURE [dbo].[uspPages_HotelPrices_Lookup_Select]
@HotelCode nvarchar(100)
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM tPages_HotelPrices_Lookup
WHERE HotelCode IN (SELECT * FROM DBO.ufSplit(@HotelCode, ','))
END
DBO.ufsplit 拆分逗号分隔的字符串并返回一个表,其中每一行包含每个逗号分隔的值。
我使用下面的代码将一个字符串传递给这个存储过程:
static void Main(string[] args)
{
HotelCodesTableAdapter hcTa = new HotelCodesTableAdapter();
DestinationMarketingEntity.HotelCodesDataTable hotelCodesDt = hcTa.GetData();
string hotelCodesString = "";
//Comma separating hotel codes and putting each word in '' to be passed to sql sproc as a list
for (int i = 0; i < hotelCodesDt.Count; i++)
{
hotelCodesString += hotelCodesDt.Rows[i].ItemArray.GetValue(0).ToString() + ",";
}
hotelCodesString = hotelCodesString.TrimEnd(',');
HiltonEEHotelPricesTableAdapter hEETa = new HiltonEEHotelPricesTableAdapter();
WorldWideFeedEntity.HiltonEEHotelPricesDataTable hEEDt= hEETa.GetData(hotelCodesString);
}
最后一行是调用存储过程的地方。
基本上hotelCodesString 与"1,2,3" 相似,但是这不会从这个存储过程中返回任何内容。但如果我运行以下内容:
select *
from tPages_HotelPrices_Lookup
where HotelCode IN
(
SELECT *
FROM DBO.ufSplit('1,2,3',',')
);
它会取回我想要的一切。我在这里错过了什么吗?为什么用 c# 从值传递时不返回任何内容?
【问题讨论】:
-
标签更改有帮助吗?
-
[dbo]相当大的暗示它是 mssql。 -
您确定
1,2,3正在传递到proc 中吗?首先尝试调试您的 C# 代码以确保这是实际值,并且您也可以临时(或永久)修改您的 proc 以便它记录传入的参数值。只是为了确保那里没有任何奇怪的事情发生。 -
你也可以尝试追踪通过SQL profiler生成的SQL
标签: c# sql-server-2008 visual-studio