Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多个列值从c#传递到已在sql中生成的存储过程中_C#_Sql_Sql Server_Stored Procedures - Fatal编程技术网

将多个列值从c#传递到已在sql中生成的存储过程中

将多个列值从c#传递到已在sql中生成的存储过程中,c#,sql,sql-server,stored-procedures,C#,Sql,Sql Server,Stored Procedures,我已经成功地在sql server中创建了存储过程,它接受了3个参数——TABLE_NAME、ATTR_NAME和ATTR_值 范例 exec Insert 'name,descr','''abc'',''cde''','tableEmployee' 代码: 我的问题是如何从c代码中调用此过程 如何以相同的方式传递参数,如 'name,descr','''abc'',''cde''','tableEmployee' 在SQL Server中的存储过程中 请帮忙(!!!您可以这样做: usi

我已经成功地在sql server中创建了存储过程,它接受了3个参数——TABLE_NAME、ATTR_NAME和ATTR_值

范例

exec Insert 'name,descr','''abc'',''cde''','tableEmployee'
代码:

我的问题是如何从c代码中调用此过程

如何以相同的方式传递参数,如

'name,descr','''abc'',''cde''','tableEmployee' 
在SQL Server中的存储过程中


请帮忙(!!!

您可以这样做:

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也会产生错误,因为您还没有真正定义它们。

参数不能用于表名或列名。@Steve-这不是OP要问的问题。他的问题是如何从C#@mike调用他的存储过程-我的存储过程工作得很好。我在这里缩短了它。我的目标是让用户了解我可以是多个且确定的NPUT..并在c#中调用存储过程以插入到中用户给定的我的表中parameters@user3228318-那么你必须更具体一些。你的存储过程看起来像什么?你希望你的输入看起来像什么?@user3228318你的存储过程工作正常吗?我真的有很多疑问这一点,更不用说使用该文本创建存储过程的可能性了。
您应该获得_msg1087,级别16,状态1,过程InsertTest,第xxx行必须声明表变量“@table_name”。
参数不能以这种方式用于表或列名。您必须使用动态sql,还必须避免使用关键字作为sp名称
insert into @table_name (col1,col2,col3) values (val1,val2,val3)