[英]Varying number of records
我正在從我的C#代碼執行SQL Server存儲過程,該過程實際上是根據提供的條件從數據庫中提取了一些數據。
DataSet GetAllxxxxxByDate(string entityValue,string companyValue)
{
using (var sqlConn = new SqlConnection(GetConnectionString()))
{
using (var cmd = new SqlCommand())
{
var data = new DataSet();
cmd.CommandText = “myStoredprodecure”;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlConn;
var eVal = string.IsNullOrWhiteSpace(entityValue) ? string.Empty : entityValue;
cmd.Parameters.AddWithValue("@entity_value", eVal);
var company = string.IsNullOrWhiteSpace(companyValue) ? string.Empty : companyValue;
cmd.Parameters.AddWithValue("@company", company);
var sqlDataAdaptor = new SqlDataAdapter(cmd);
sqlDataAdaptor.Fill(data);
return data;
}
}
}
在這里, entityValue
和companyValue
是逗號分隔的字符串,在C#代碼中動態形成並將其傳遞給存儲過程。
例如:
’first’,’second’,’third’
並且存儲過程使用這些值來填充其中定義的NOT IN
條件。
問題是,當我執行代碼時,記錄數不一致。
以下是一個快速屏幕截圖,其中第一個WHERE
子句返回3條記錄,第二個WHERE
子句返回1條記錄。 第一個WHERE
子句的輸入值由c#代碼填充,第二個WHERE
子句的輸入值由手動填充以進行測試。
我能發現的唯一區別是報價數量。
問題:有人可以幫助我將問題零或將WHERE
子句中的區別歸零嗎?
好吧,您沒有顯示結果中的entity_value
,但是兩者之間的區別是您在文字值周圍添加了單引號:
SQL中的N'''FSEC'''
是字面值'FSEC'
SQL中的'FSEC'
只是FSEC
(不帶引號)。
我的猜測是,記錄2004981和2004982具有的價值FSEC
為(不帶引號) entity_value
。
如果要從C#代碼中添加參數值,請不要像在構建字符串時那樣在其周圍添加引號。 SQL會將值視為字符串,而無需字符串限定符。
編輯
好吧,我剛剛讀了下面的聲明:
在這里,entityValue,companyValue是逗號分隔的字符串
您不能只將逗號分隔的字符串傳遞給IN子句。 要搜索多個值,有幾個選項:
在兩端添加逗號並使用LIKE:
Where (',' + @entity_value +',' LIKE '%,' + entity_value + ',%')
將字符串解析為臨時表,而不是在IN子句中使用該表
EXEC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.