【问题标题】:How to return a query from sp?如何从 sp 返回查询?
【发布时间】:2012-11-21 12:44:18
【问题描述】:

我遇到了必须从 sp 和返回查询的情况 将其分配给会话。此示例查询。原始一个是大的,在许多表上具有内部连接。表名称是动态的。sp 中有 2 个查询。一个应该执行,其他可以发送到 C# 页面。如何访问该查询在 C# 中。我不想要它的结果。只是查询。我在这里只显示了一个我想返回的查询。

例子:

create Procedure Sample
(
@id int
)
as
begin
declare @pid varchar(10)
declare @query varchar(500)

set @pid = cast(@id as varchar(10))

set @query ='select * from Table1 where id = '+@pid+'' 
--Execute sp_executesql @query
--print @query
select @query
end

【问题讨论】:

    标签: asp.net sql stored-procedures


    【解决方案1】:

    设置@Query 后使用SELECT。这将返回到 c 锐利页面。 确保不要使用ExecuteNonQuery()方法

    SET @query ='select * from Table1 where id = '+@pid+'' 
    SELECT @query AS myQuery
    

    以升c为例

    DataSet ds;
    YourDataAdapter.Fill(ds);
    string query = ds.Tables[0].Rows[0]["myQuery"].ToString();
    

    【讨论】:

    • 你做到了。但我想要一个 C# 代码来访问该查询。我不能使用数据表来访问它。因为我想要查询而不是结果。怎么做?
    • 您将在此处以字符串形式获取查询。
    【解决方案2】:

    通过使用 ExecuteScalar 你可以得到这个

    SqlConnection con = new SqlConnection("Your Connection String");
    con.Open();
    SqlCommand com = new SqlCommand("Sample", con);
    com.CommandType = System.Data.CommandType.StoredProcedure;
    object query = com.ExecuteScalar();
    con.Close();
    

    【讨论】:

      【解决方案3】:

      首先,您需要向存储过程中添加一个 OUTPUT 参数,如下所示:

          @ID int , 
          @SQLQuery varchar OUTPUT
      

      在存储过程代码的后面,你可以设置它的值:

          SET @SQLQuery = 'select * from users'
      

      然后在您的 C# 中添加此类代码以从存储过程中获取此 OUTPUT 参数的值:

           System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("Sample", cn);
              cmd.CommandType = CommandType.StoredProcedure;
              System.Data.SqlClient.SqlParameter parm = new System.Data.SqlClient.SqlParameter("@ID", SqlDbType.Int);
              parm.Value = 1;
              parm.Direction = ParameterDirection.Input;
              cmd.Parameters.Add(parm);
              System.Data.SqlClient.SqlParameter parm2 = new System.Data.SqlClient.SqlParameter("@SQLQuery", SqlDbType.VarChar);
              parm2.Size = 50;
              parm2.Direction = ParameterDirection.Output; // This is important!
              cmd.Parameters.Add(parm2);
              cn.Open();
              cmd.ExecuteNonQuery();
              cn.Close();
      
              // Print the output value
              Console.WriteLine(cmd.Parameters["@SQLQuery"].Value);
              Console.ReadLine();
      

      我希望这将回答您的问题。如果是,则将其标记为“已回答”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        • 1970-01-01
        相关资源
        最近更新 更多