在C#中访问SQL Server存储函数的结果

时间:2011-06-18 14:26:18

标签: c# sql-server stored-procedures

我在SQL Server中创建了一些通过select语句返回表的存储函数。像这样:

CREATE FUNCTION [dbo].[mFunSelectStudents] ()
RETURNS @result TABLE
    (IDStudent int, 
     Name nchar(50),
     Password nchar(50))
AS 
BEGIN
    INSERT INTO @result select * from School.dbo.Student
    RETURN    
END

我尝试将函数分配给c#中的SqlDataAdapter,如下所示:

SqlCommand cmd = new SqlCommand("mFunSelectStudents", con);
SqlDataAdapter adpStudents = new SqlDataAdapter();
adpStudents.SelectCommand = cmd;

但这不起作用..

其中@result是存储函数的返回参数。现在,如何在C#中调用该函数并将数据分配给网格?

感谢任何帮助..

3 个答案:

答案 0 :(得分:3)

该命令不能只是函数的名称。您应该在那里放置一个SQL命令,在SQL中,通过从中选择从TVF中检索数据,如下所示:

SELECT * FROM dbo.mFunSelectStudents()

因此,C#代码段的第一行应为:

SqlCommand cmd = new SqlCommand("SELECT * FROM dbo.mFunSelectStudents()", con);

答案 1 :(得分:0)

将函数包装在存储过程中,或者在SP中完成工作。单个select语句的结果可以作为C#客户端中的DataTable访问。

      create proc  selectSomeData
       .
       .
       .

在客户端中,您的commandType将是StoredProcedure,CommandText将是sp的名称。

答案 2 :(得分:-1)

你的第一行:

  

SqlCommand cmd = new SqlCommand(“mFunSelectStudents”,con);

是正确的,不过这个你应该检查一下

  

SqlDataAdapter adpStudents.SelectCommand = cmd;

首先,您需要在使用SqlDataAdapter时使用new,然后才能分配selectCommand,如下所示:

SqlDataAdapter adpStudents = new SqlDataAdapter(cmd);

将命令分配给DataAdapter

adpStudents.SelectCommand = cmd;

然后你准备一个数据集

DataSet ds = new DataSet();

使用您的DataAdapter填充

adpStudents.Fill(ds);

将其分配给您的网格

gridName.DataSource = ds;

并调用DataBind来更新网格上的信息

gridName.DataBind();