尝试从asp.net web api返回数据

尝试从asp.net web api返回数据,asp.net,asp.net-web-api,Asp.net,Asp.net Web Api,我正在尝试将web api添加到现有的asp.net ASPX站点 我只想让它返回(JSON或XML)我的查询结果——但是我得到了一个错误:无法将“System.Data.DataTable”类型的对象强制转换为“System.Collections.Generic.IEnumerable`1[System.Web.UI.WebControls.Table]” 。。。在代码的最后部分 我在API控制器中的代码是: Imports System.Web.Http Imports System.We

我正在尝试将web api添加到现有的asp.net ASPX站点

我只想让它返回(JSON或XML)我的查询结果——但是我得到了一个错误:无法将“System.Data.DataTable”类型的对象强制转换为“System.Collections.Generic.IEnumerable`1[System.Web.UI.WebControls.Table]”

。。。在代码的最后部分

我在API控制器中的代码是:

Imports System.Web.Http
Imports System.Web
Imports System.Data
Imports System.Data.SqlClient

Public Class ValuesController
Inherits ApiController

' GET /api/<controller>
Public Function GetValues() As IEnumerable(Of Table)

    Dim con As New SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=inv;Integrated Security=True")
    Dim cmd As SqlCommand = New SqlCommand("select * from customers", con)
    cmd.CommandType = CommandType.Text
    Dim adapter As SqlDataAdapter = New SqlDataAdapter(cmd)
    Dim dt As New DataTable
    Using con
        Try
            con.Open()
            adapter.Fill(dt)
            'Check if any rows were returned
            If dt.Rows.Count = 0 Then
                'If no rows, return nothing
                Return Nothing
            Else
                'Return the filled datatable
                Return dt
            End If
        Catch ex As Exception
            con.Close()
            Throw ex
        Finally
            con.Close()
        End Try
    End Using

    Return New String() {"value1", "value2"}
End Function
Imports System.Web.Http
导入系统.Web
导入系统数据
导入System.Data.SqlClient
公共类值控制器
继承ApiController
'GET/api/
公共函数GetValues()作为IEnumerable(表的)
Dim con作为新的SqlConnection(“数据源=。\SQLEXPRESS;初始目录=inv;集成安全性=True”)
Dim cmd As SqlCommand=新SqlCommand(“从客户处选择*,con)
cmd.CommandType=CommandType.Text
作为SqlDataAdapter的Dim适配器=新的SqlDataAdapter(cmd)
Dim dt作为新数据表
利用骗局
尝试
con.Open()
适配器填充(dt)
'检查是否返回了任何行
如果dt.Rows.Count=0,则
'如果没有行,则不返回任何内容
一无所获
其他的
'返回已填充的数据表
返回dt
如果结束
特例
con.Close()
投手
最后
con.Close()
结束尝试
终端使用
返回新字符串(){“value1”,“value2”}
端函数

查看异常消息,它表示无法将DataRow集合转换为System.Web.UI.WebControl.Table的IEnumerable

问题是函数的签名

Public Function GetValues() As IEnumerable(Of Table)
应该是这样的

Public Function GetValues() As IEnumerable(Of DataTable)

我认为答案只是将函数的签名更改为As EnumerableRowCollection。获取DataTable对象并使用AsEnumerable()方法时,它将数据行的集合作为EnumerablerRowCollection返回,尽管只将其作为EnumerablerRowCollection写入就足够了。

尝试返回dt.AsEnumerable()您好-很遗憾,这也不起作用-异常显示:无法将类型为“System.Data.EnumerablerRowCollection
1[System.Data.DataRow]”的对象强制转换为类型为“System.Collections.Generic.IEnumerable
1[System.Web.UI.WebControl.Table]”。再次感谢,MarkHi-感谢您的建议-我更改了这一点,当前的错误提示:无法将“System.Data.EnumerablerRowCollection
1[System.Data.DataRow]”类型的对象强制转换为“System.Collections.Generic.IEnumerable
1[System.Data.DataTable]”感谢您使用IEnumerable(数据行的)作为基本类型