将多个列值从c#传递到已在sql中生成的存储过程中
我已经成功地在sql server中创建了存储过程,它接受了3个参数——TABLE_NAME、ATTR_NAME和ATTR_值 范例将多个列值从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
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)