2015-09-09 2 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# в качестве одного параметра. Поскольку некоторое время в значениях может быть различным.

Ex: 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

Способ, которым я вижу вокруг: использовать параметры таблицы и отправлять параметры в формате datatable из C#.

И в хранимых процедурах что-то вроде SELECT * от TableName где AppCode в (выберите параметр из tvpTable)

Это похоже

Table valued parameters

Смежные вопросы