MSSQL将参数传递给C#中的查询

时间:2015-09-09 08:37:20

标签: c# sql-server

我想做什么: 将此参数'TV','OV','CK'作为单个字符串传递到存储过程(GetAllDataViaInQuery)

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')  

这是有效的。那么在C#中将参数传递给IN查询的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我看到的方法是,使用表值参数并从c#发送数据格式的参数。

在存储过程中类似于从TableName中选择*,其中AppCode在(从tvpTable中选择参数)

这是类似的

Table valued parameters