将c#中的多个列值传递给已在sql中创建的存储过程

时间:2015-01-24 19:47:35

标签: c# sql sql-server stored-procedures

我已经在sql server中成功创建了我的存储过程,该过程包含3个参数 - TABLE_NAME,ATTR_NAMES和ATTR_VALUES。

实施例

exec Insert 'name,descr','''abc'',''cde''','tableEmployee'

代码:

CREATE PROCEDURE [dbo].[Insert] 
(
    @table_name varchar(50), 
    @attr_names varchar(50),
    @attr_values varchar(50)
)
AS 
    insert into @table_name (col1, col2, col3) 
    values (val1, val2, val3)

我的查询是如何从c#代码调用此过程!

如何以与

相同的方式传递参数
'name,descr','''abc'',''cde''','tableEmployee' 

一次进入SQL Server的存储过程?

请帮助...... :((!!!

1 个答案:

答案 0 :(得分:0)

您可能会这样做:

using(var cmd = sqlConn.CreateCommand())
{ 
   cmd.CommandType = CommandType.StoredProcedure
   cmd.CommandText = "Insert";

   var tblName = cmd.Parameters.Add(new SqlParameter("table_name", SqlDbType.NVarChar));
   var attr_names = cmd.Parameters.Add(new SqlParameter("attr_names", SqlDbType.NVarChar));
   var attr_values = cmd.Parameters.Add(new SqlParameter("attr_values", SqlDbType.NVarChar));

   tblName.Value = "tableEmployee";
   attr_names.Value = "name,descr";
   attr_values.Value = "'abc','cde'";

   cmd.ExecuteNonQuery();
}

但是,您在存储过程中犯了几个错误。并使用' Insert'作为存储过程的名称是非常不幸的,因为它是SQL中的保留关键字。

正如其他人在评论中指出的那样,以下内容无效:

insert into @table_name (col1,col2,col3) values (val1,val2,val3)

在上文中,@table_name将引用本地表变量(您尚未定义),val1,val2,val3也会产生错误,因为您还没有真正定义它们。< / p>