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

本文关键字:函数 结果 存储 Server SQL 访问 | 更新日期: 2023-09-27 17:59:24

我在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#中的函数并将数据分配给网格?

任何帮助都将不胜感激。。

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

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

SELECT * FROM dbo.mFunSelectStudents()

因此,C#代码片段的第一行应该是:

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

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

      create proc  selectSomeData
       .
       .
       .

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

您的第一行:

SqlCommand cmd=新的SqlCommand("mFunSelectStudents",con);

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

SqlDataAdapter adpStudents。SelectCommand=cmd;

首先,您需要将new与SqlDataAdapter一起使用,然后才能分配selectCommand,如下所示:

SqlDataAdapter adpStudents = new SqlDataAdapter(cmd);

将命令分配给DataAdapter

adpStudents.SelectCommand = cmd;

然后准备一个数据集

DataSet ds = new DataSet();

用DataAdapter 填充

adpStudents.Fill(ds);

将其分配给您的网格

gridName.DataSource = ds;

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

gridName.DataBind();