我遇到过必须从sp和。返回查询的情况 将其分配给session.This示例查询。原始的一个是大的,在许多表上有内连接。表名是动态的.sp.One中的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
答案 0 :(得分:1)
设置@Query后使用SELECT。这将返回到c页面。
请确保不要使用ExecuteNonQuery()
方法
SET @query ='select * from Table1 where id = '+@pid+''
SELECT @query AS myQuery
以c sharp为例,
DataSet ds;
YourDataAdapter.Fill(ds);
string query = ds.Tables[0].Rows[0]["myQuery"].ToString();
答案 1 :(得分: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();
答案 2 :(得分: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();
我希望这会回答你的问题。如果是,则将其标记为“已回答”。