0

我遇到了一种情况,我必须从 sp 返回一个查询并将其分配给 session。这个示例查询。原来的一个很大,在许多表上有内部连接。表名是动态的。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
4

3 回答 3

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();
于 2012-11-21T12:50:37.313 回答
0

首先,您需要向您的存储过程添加一个 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();

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

于 2012-11-21T13:21:57.107 回答
0

通过使用 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();
于 2012-11-21T13:15:31.390 回答