如何使用ado.net

时间:2016-01-25 05:47:54

标签: c# asp.net sql-server asp.net-mvc ado.net

我在sql中实现了Inline表值函数。我试图使用ado.net读取C#中从Inline表值函数返回的表值。请帮忙。我在这里附上代码。

Sql函数: -

CREATE FUNCTION fun 
(   
    @lname varchar(50)
)
RETURNS TABLE 
AS
RETURN 
(
    select fp.accntname,ld.BU,fp.salesop,idt.isdormant from legacy_system as ls
inner join fourth_page as fp on ls.accountname=fp.accountname
inner join linked as ld on fp.productid=ld.productid
inner join isdormant as idt on idt.productid=ld.productid
inner join legacy_system as l on ls.productid=idt.productid
where l.legacyname in(@lname)
)
GO

C#代码: -

 [HttpPost]
            public void call_stored_procedure(List<string> lyname)
            {
                Console.WriteLine(lyname);
                string dogCsv = string.Join(",", lyname.Select(i => "'" + i + "'"));
                Console.WriteLine(dogCsv);
                using (SqlConnection connection = new SqlConnection("data source=.; database=Srivatsava; integrated security=SSPI"))
                {
                    connection.Open();
                    using (SqlCommand command = connection.CreateCommand())
                    {
                        command.CommandText = "select dbo.fun(@lname)";
                        command.Parameters.AddWithValue("@lname", dogCsv);
                        command.CommandType = CommandType.Text;
                        String s=command.ExecuteScalar().ToString();
                        Console.WriteLine(s);
                        connection.Close();
                    }
                }

            }

2 个答案:

答案 0 :(得分:1)

表值函数返回一个表,以便读取命令文本应该是

的结果
command.CommandText = "select * from dbo.fun(@lname)";

现在您正在使用ExecuteScalar()函数来执行命令。

来自MSDN - ExecuteScalar()

  

执行查询,并返回第一行的第一列   查询返回的结果集。其他列或行是   忽略。

因此,即使您的函数返回包含多列的记录集,也只返回第一行的第一列。

如果需要读取表值函数返回的完整记录集,则需要使用ExecuteReader()函数。

ExecuteReader()

  

将CommandText发送到Connection并构建一个SqlDataReader。

答案 1 :(得分:0)

以下所有链接均为related to your question ..已经解决了..所以请before post any question ..请看它已经有答案/已解决..

Calling SQL Defined function in C#

How can I call a SQL function in C#?

Calling SQL Functions directly from C#