我在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#中调用该函数并将数据分配给网格?
感谢任何帮助..
答案 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();