2015-09-09 80 views
0

我想要做什麼: 傳遞此參數'TV','OV','CK'一個字符串到存儲過程(GetAllDataViaInQuery)MSSQL通參數在C#查詢

CREATE PROCEDURE GetAllDataViaInQuery @param varchar(240) 
AS 
BEGIN 
SELECT TOP 100 [Model_No] 
     ,[AppCode] 
     ,[Model] 
FROM [S_ModelMaster] where AppCode in (@param) 
END 

然後

我需要通過C#應用程序將參數值作爲單個參數傳遞。因爲值中的某些時間可能會有所不同。

例:string paramValue = "TV,OV,CK";

然後我寫了這個C#代碼段。

using (SqlConnection con = new SqlConnection(Properties.Settings.Default.Setting)) 
      { 
       try 
       { 
        //hard coded parameter values 
        string paramValue = "TV,OV,CK"; 
        con.Open(); 
        DataSet ds = new DataSet(); 
        SqlCommand com = new SqlCommand("GetAllDataViaInQuery", con); 
        com.CommandType = CommandType.StoredProcedure; 
        SqlParameter param = new SqlParameter("@param", paramValue); 
        com.Parameters.Add(param); 

        SqlDataAdapter adp = new SqlDataAdapter(com); 
        adp.Fill(ds); 
        dataGridView1.DataSource = ds.Tables[0]; 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.Message); 
       } 
      } 

但是這還不行。 然後我用SSMS手動執行存儲過程。

enter image description here

DECLARE @return_value int 

EXEC @return_value = [application].[GetAllDataViaInQuery] 
     @param = N'TV,OV,CK' 

SELECT 'Return Value' = @return_value 

但它沒有工作!

然後我嘗試在sql query

SELECT TOP 100 [Model_No] 
     ,[AppCode] 
     ,[Model] 
FROM [S_ModelMaster] where AppCode in ('TV','OV','CK') 

而且它的work.So什麼是參數傳遞到IN查詢在C#中的正確方法是什麼?

+2

一個字符串,*包含*單引號和逗號是與*多個*字符串不一樣。這在T-SQL中與在大多數語言中一樣。 SQL Server已經內置了兩種數據類型的支持,這兩種數據類型都是爲了保存多個值而設計的表格和XML。那麼,爲什麼要強制自己通過傳遞一個字符串來解決問題,然後將其分解爲多個值? –

+0

試試這個 - > http://stackoverflow.com/a/1525153/2020893 –

+0

說真的,這個問題每週要問一次。這不是最容易找到的,但已經有十多個問題接受了答案。 – Luaan

回答

1

我看到這個的方式是,使用表值參數和從C#發送參數的數據表格格式。

而在存儲過程中像SELECT * FROM表名,其中AppCode中(從tvpTable選擇參數)

這類似於

Table valued parameters