SqlDataAdapter - 将存储过程和Select语句与参数组合在一起

时间:2017-02-08 15:49:54

标签: c# asp.net sql-server stored-procedures

使用SqlDataAdapter(或其他ASP.NET技术),是否可以对存储过程进行单个SQL调用并运行select语句?两者都有参数。

我知道你可以组合多个选择语句......

DataSet ds = new DataSet();

using (SqlConnection connection = new SqlConnection(myConnectionString))
{
    connection.Open();

    SqlDataAdapter cmd = new SqlDataAdapter("SELECT id FROM Table1 WHERE id=@myid; SELECT id FROM Table2", connection);
    cmd.SelectCommand.Parameters.AddWithValue("@id",myid);
    cmd.Fill(ds);
}

你可以用类似的方式调用存储过程......

DataSet ds = new DataSet();

using (SqlConnection connection = new SqlConnection(myConnectionString))
{
    connection.Open();
    SqlDataAdapter cmd = new SqlDataAdapter("myStoredProcedure", connection);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.SelectCommand.Parameters.AddWithValue("@id",myid);
    cmd.Fill(ds);
}

但我想将两者合并为一个电话。

我需要保持存储过程和select语句分开。我不想将它们组合成一个存储过程。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

技巧是exec功能。

来自文档

  

它在Transact-SQL中执行命令字符串或字符串   批处理或以下模块之一:系统存储过程,   用户定义的存储过程,CLR存储过程,标量值   用户定义的函数或扩展的存储过程。

所以你可以这样做:

DataSet ds = new DataSet();
using (SqlConnection connection = new SqlConnection(myConnectionString))
{
    connection.Open();
    SqlDataAdapter cmd = new SqlDataAdapter("SELECT id FROM Table1 WHERE id=@myid; Exec myStoredProcedure @myid", connection);
    cmd.SelectCommand.Parameters.AddWithValue("@myid",myid);
    cmd.Fill(ds);
}