将多个参数作为单个字符串变量传递给sql过程

Swa*_*ati 2 c# sql-server-2005 procedures

从前端(studio 2008)我将值传递给sql过程:

string a ="hello"+"098765"+"world"+"90.0909"

这是我将4个不同的值连接成字符串a;

现在我使用c#sqlCommand对象将此字符串传递给sql过程.

现在,我如何在sql过程中检索这4个值,因为我已经创建了以下过程:

create procedure Proc_name (@concatenated_string varchar(100))
as
insert into table1 values(**how can i get those 4 values here**).
Run Code Online (Sandbox Code Playgroud)

我使用数组但它没有用.

gbn*_*gbn 6

如果要将数组传递到SQL Server以处理一个表上的"multirow"更新,请阅读这篇着名的文章.

如果您希望通用存储过程更新任何表,则不要按照其他注释


Dav*_*all 5

执行此操作的标准方法是在过程中使用四个参数:

create procedure Proc_name (@param1 varchar(100), 
    @param2 varchar(100), 
    @param3 varchar(100), 
    @param4 varchar(100)) 
as 
insert into table1 values(@param1, @param2, @param3, @param4)
Run Code Online (Sandbox Code Playgroud)

然后从您的代码(使用ADO.NET提供ac#示例)

using (SqlConnection connection = new SqlConnection(connectionString))
{
    // Create the command and set its properties.
    SqlCommand command = new SqlCommand();
    SqlCommand command = new SqlCommand 
       ("Proc_name", connection); 

    command.CommandType = CommandType.StoredProcedure;

    // Add the input parameters and set the properties.
    SqlParameter parameter1 = new SqlParameter();
    parameter.ParameterName = "@Param1";
    parameter.SqlDbType = SqlDbType.NVarChar;
    parameter.Direction = ParameterDirection.Input;
    parameter.Value = param1;

    SqlParameter parameter2 = new SqlParameter();
    parameter.ParameterName = "@Param2";
    parameter.SqlDbType = SqlDbType.NVarChar;
    parameter.Direction = ParameterDirection.Input;
    parameter.Value = param2;

    // Same for params 3 and 4...


    // Add the parameter to the Parameters collection. 
    command.Parameters.Add(parameter1);
    command.Parameters.Add(parameter2);
    command.Parameters.Add(parameter3);
    command.Parameters.Add(parameter4);


    // Open the connection and execute the reader.
    connection.Open();
    SqlDataReader reader = command.ExecuteNonQuery();

    reader.Close();
}
Run Code Online (Sandbox Code Playgroud)