1
我使用cloture.xsd。我把這個連接到我的報告Cloture_Tete。C#數據集SQL選擇
在SQL它的工作原理:
SELECT NO_ORDRE, CODE_CLIENT, CODE_DEST, STATUT_ORDRE, RS_NOM, ADRESSE, CP, VILLE, PAYS, INSEE, SIRET, TEL, FAX, EMAIL, ENLEV_UNITE, ENLEV_CREMB,
ENLEV_DECL, MODAL_MODE, MODAL_PORT, MODAL_SPEC, LIVRS_EXPRS, LIVRS_SIGN, LIVRS_SAMD, NBR_COLIS, POID, POID_COR, CODE_MAG, OBS,
DATE_CREE, DATE_MODIF, CREE_PAR, MODIF_PAR, REF_EXPED, AUTRE_REF, DATE_CLOTUR, AGENCE, TRANSPORTEUR, CHAUFFEUR, FACTURATION
FROM ORDRE
WHERE (STATUT_ORDRE = 2) AND (TRANSPORTEUR IN (1, 2))
,但是當我通過C#做:
protected void Page_Load(object sender, EventArgs e)
{
string CHAUFFEUR = Request.QueryString["CHAUFFEUR"];
string CODE_CLIENT = Request.QueryString["ClientID"];
string ClotList = Request.QueryString["ClotList"];
try
{
using (var connectionWrapper = new Connexion())
{
ReportViewer_Cloture.Report = new Cloture_Tete(Convert.ToInt32(CHAUFFEUR), CODE_CLIENT, ClotList);
}
}
catch (Exception excThrown)
{
throw new Exception(excThrown.Message);
}
}
與我的預定義選擇cloture.xsd:
SELECT ADRESSE, AGENCE, AUTRE_REF, CHAUFFEUR, CODE_CLIENT, CODE_DEST, CODE_MAG, CP, CREE_PAR, DATE_CLOTUR, DATE_CREE, DATE_MODIF, EMAIL, ENLEV_CREMB, ENLEV_DECL, ENLEV_UNITE, FACTURATION, FAX, INSEE, LIVRS_EXPRS, LIVRS_SAMD, LIVRS_SIGN, MODAL_MODE, MODAL_PORT, MODAL_SPEC, MODIF_PAR, NBR_COLIS, NO_ORDRE, OBS, PAYS, POID, POID_COR, REF_EXPED, RS_NOM, SIRET, STATUT_ORDRE, TEL, TRANSPORTEUR, VILLE FROM ORDRE WHERE (STATUT_ORDRE = 2) AND (TRANSPORTEUR IN (@Trans))
,我期待與我產生的SQL Profiler:
exec sp_executesql N'SELECT ADRESSE, AGENCE, AUTRE_REF, CHAUFFEUR, CODE_CLIENT, CODE_DEST, CODE_MAG, CP, CREE_PAR, DATE_CLOTUR, DATE_CREE, DATE_MODIF, EMAIL, ENLEV_CREMB, ENLEV_DECL, ENLEV_UNITE, FACTURATION, FAX, INSEE, LIVRS_EXPRS, LIVRS_SAMD, LIVRS_SIGN, MODAL_MODE, MODAL_PORT, MODAL_SPEC, MODIF_PAR, NBR_COLIS, NO_ORDRE, OBS, PAYS, POID, POID_COR, REF_EXPED, RS_NOM, SIRET, STATUT_ORDRE, TEL, TRANSPORTEUR, VILLE FROM ORDRE WHERE (STATUT_ORDRE = 2) AND (TRANSPORTEUR IN (@Trans))',N'@Trans varchar(50)',@Trans='1,2'
那不行,爲什麼不同的只是在SQL (TRANSPORTEUR IN (1, 2))
和(TRANSPORTEUR IN (@Trans))',N'@Trans varchar(50)',@Trans='1,2'
感謝您提前
感謝您的回覆。你能給我一個提示嗎?我如何構建一個(1,2)?我應該在C#端還是SQL端工作? – user609511
@ user609511它取決於可用的工具; p字符串串聯有點危險,除非你知道**內容是安全的。通常,您需要TSQL才能擁有正確數量的元素。我們自己的工具(dapper)爲我們做了這個工作,使我們能夠使用「where @ in @foo」(它添加括號並從列表中擴展參數等)。更一般地說,UDF方法非常普遍且安全 –