Возвращает DataTable в WCF и .NET

#vb.net #wcf #datatable

#vb.net #wcf #datatable

Вопрос:

Спасибо, Уильям, это был билет. Пришлось присвоить свойству name на обоих концах [DataTable.Имя таблицы].

Кстати, здесь: похоже, существует некоторая школа мысли (без обид, Марк), что следующее утверждение всегда верно:

«Все в мире может и должно быть превращено в объект».

Это, просто, не всегда верно. Бывают случаи, когда вы не можете втиснуть свой «объект» в какой-либо файл cookie или класс, независимо от того, как вы пытаетесь его настроить. Чтобы я мог объективировать этого зверя, мне пришлось бы создать примерно 4000 объектов. У меня нет на это времени, и все же этот проект должен выполняться как сервис. Честно говоря, я думаю, что разработчикам из MickeySoft нужно больше выходить в реальный мир и самим убедиться, что, хотя теория великолепна, она не представляет реальных проблем. Я полностью за работу с объектами из-за очевидных преимуществ, но реальность такова, что универсалий не существует. В моей профессии даже «большую часть времени» случается редко.

Прежде чем они выпустят новый набор технологий и прекратят поддержку старого, им нужно убедиться, что новая технология обладает теми же возможностями, что и старая.

Для протокола: люди, которые верят в правдивость приведенного выше утверждения, — это те же самые люди, которые отказались бы взяться за проект, над которым я сейчас работаю.

Все равно — спасибо вам обоим за ваше время, усилия и мнения!

Я пытаюсь создать функцию WCF, которая вернет таблицу в мое консольное тестовое приложение. Я полный нуб. Данные являются двумерными и выглядят следующим образом:

 23 Letter
42 Another Letter
43 Document
...
  

Вот что я пытаюсь сделать:

 <ServiceContract()> _
Public Interface ILetterWriter
    <OperationContract()> _
    Function GetLetter(ByVal LetterID As String, ByVal StateID As String, ByVal CompID As String, ByVal tblVar As DataTable) As String

    <OperationContract()> _
    Function GetLetterNames(ByVal DepartmentType As Integer) As DataTable

End Interface



    Public Function GetLetterNames(ByVal DepartmentType As Integer) As DataTable Implements ILetterWriter.GetLetterNames
        Dim SQLCon As New SqlClient.SqlConnection
        Dim SQLCmd As New SqlClient.SqlCommand

        'Connect to the database
        SQLCon.ConnectionString = "Data Source=VMSQL08-SRV1;Initial Catalog=DotNetDev;User ID=aiis_pgmr;Password=ag58102;"
        SQLCon.Open()


        'Grab the stored procedure, which returns the letter names
        SQLCmd.CommandText = "sp_GetLetters"
        SQLCmd.CommandType = CommandType.StoredProcedure
        SQLCmd.Connection = SQLCon


        'Pass the parameters
        SQLCmd.Parameters.AddWithValue("@LetterType", DepartmentType)


        'Execute the stored procedure, fill the datatable from a data adapter
        GetLetterNames = New DataTable
        GetLetterNames.Load(SQLCmd.ExecuteReader)


        'Shut it down
        SQLCmd.Dispose()
        SQLCon.Close()
        SQLCon.Dispose()
    End Function
  

…Конечно, это не сработает. Мне просто нужно заставить WCF передать базовую таблицу в мое консольное приложение. Кажется, что execute SQL работает просто отлично, я просто не могу вернуть данные обратно в свое приложение.

Любая помощь была бы высоко оценена.

Спасибо, Джейсон

Комментарии:

1. Одно слово: НЕ — или, точнее: даже не думайте об этом …. с WCF у вас должны быть реальные объекты домена (например, Customer , Letter и т.д.) И возвращать отдельные экземпляры или их списки. Отойдите от DataTable технологий — это оооочень двадцатый век…..

2. С SQL Server хорошей идеей является отказ от таблиц данных. Таким образом, Entity Framework и т.д… Однако я нахожусь в магазине Oracle, и с Oracle 9i я буквально не могу даже использовать бета-версию EF от Oracle, поскольку сохраненные процедуры НЕ поддерживаются (даже не разрешайте их выбирать в настройке мастера EF). Таким образом, прямо ADO.NET для Datasets обязательны таблицы данных и DataReader. С MVC Framework это не идеально для преобразования, но является обязательным.

Ответ №1:

Я согласен с другим постером.

Однако, если вы возвращаете таблицу данных, вы должны установить свойство «Name» для таблицы данных, если вы хотите вернуть ее из службы WCF.

Комментарии:

1. Я знаю, о чем вы оба говорите, но, к сожалению, бизнес-правила для этого дурацкие. Каждая буква имеет различный набор и количество атрибутов. Я НЕ МОГУ создать стандартный объект letter.

2. Вы должны задать имя таблицы данных, прежде чем возвращать его в OperationContract. DataTable test = новый DataTable(); тест. Имятаблицы = «Что угодно»;