如何使用c#代码后面的参数调用存储过程

时间:2010-09-01 08:27:07

标签: c# asp.net sql-server sql-server-2005

我创建了一个如下所示的存储过程,如何从c#代码后面调用它来获取结果,结果存储在数据集中。

USE [Test]
GO
/****** Object:  StoredProcedure [dbo].[tesproc]    Script Date: 09/01/2010 13:00:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 ALTER PROCEDURE [dbo].[tesproc]
    -- Add the parameters for the stored procedure here
    @a float, @b float, @c float,@d int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    select Id, Name1,ZipCode,StreetName,StreetNumber,State1,Lat,Lng,  ( 6371 * ACOS( COS( (@a/@b) ) * COS(  (Lat/@b)  ) * COS( ( Lng/@b ) - (@c/@b) )  + SIN( @a/@b ) * SIN(  Lat/@b  ) ) ) as distance from business_details where ( 6371 * ACOS( COS( (@a/@b) ) * COS(  (Lat/@b)  ) * COS( ( Lng/@b ) - (@c/@b) )  + SIN( @a/@b ) * SIN(  Lat/@b  ) ) )<@d
END

如果我在sql server中执行此存储过程,则可通过以下调用

正常工作
exec dbo.tesproc 12.9216667 ,57.2958,77.591667,1

2 个答案:

答案 0 :(得分:4)

using (SqlConnection conn = new SqlConnection("connection string goes here"))
using (SqlCommand comm = new SqlCommand("tesproc", conn))
{
    comm.CommandType = CommandType.StoredProcedure;
    comm.Parameters.AddWithValue("@a", 0.1);
    // etc

    conn.Open();

    using (SqlDataReader reader = comm.ExecuteReader())
    {
        while (reader.Read())
        {
            int id = reader.GetInt32(reader.GetOrdinal("id"));
            // etc
        }
    }
}

互联网上有很多全面的样本:

http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson04.aspx

我的代码示例只是展示了它的样子 - 它直接在编辑器中编写,因此可能无法自行运行。

答案 1 :(得分:1)