ASP.NET MVC - проблема с System.Data.DataSet не указана
-
05-07-2019 - |
Вопрос
Что ж, во -первых, извините за этот вопрос, это должно быть довольно прямо для вас, ребята, но я борюсь за него, и мне нужно заставить его работать :( Ну, я пытаюсь использовать набор данных в своем приложении
и когда я это сделал, я получил:
The type 'System.Data.DataSet' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Data
в моем приложении на System.Data уже есть ссылка из C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll
и я также использую свои предложения использования
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;
Этот набор данных является ответом от веб -сервиса, чтобы какие -либо идеи о том, как решить эту проблему?
ПС.Не знаю, поможет ли это, но я использую nHaml для визуализации своего представления.
Большое спасибо
ОБНОВЛЯТЬ:
Единственное решение, которое я нашел на данный момент, заключалось в том, чтобы вместо передачи DataSet в преобразователь представления DataSet в
<List<List<String>>
и пройдите цикл по всему набору данных вот так
List<List<String>> myList = new List<List<String>>();
foreach (DataRow row in dsTrades.Tables[0].Rows)
{
List<String> myListColumns = new List<String>();
for (var index = 0; index < dsTrades.Tables[0].Columns.Count; index ++)
{
myListColumns.Add(row[index].ToString());
}
myList.Add(myListColumns);
}
// THIS SHOULD BE THE DATASET AND NOW
// IT'S CONVERTED TO A LIST WITH STRINGS LIST INSIDE
viewModel.Trades = myList;
return View(viewModel);
На самом деле это полное безумие, не так ли?
Вся эта работа может быть легко выполнена в представлении, если напрямую использует набор данных, я надеюсь, что кто -то может помочь мне с более упрощенным способом сделать это
Спасибо :)
ОБНОВЛЕНИЕ (РЕШЕНИЕ)
Ответ Саймона был действительно эффективным и сработал с первой попытки после добавления пространств имен для System.Data и System.Xml, но в то же время ответ Джоша представляет собой очень приятный и классный способ работы с наборами данных, который, на мой взгляд, работает намного лучше. и я думаю, что пойду на это сейчас.
Спасибо за помощь
Решение
попробуйте добавить явную ссылку на System.Data в вашу конфигурацию nhaml
<?xml version="1.0"?>
<configuration>
...
<configSections>
<section name="nhaml" type="NHaml.Configuration.NHamlConfigurationSection, NHaml"/>
</configSections>
...
<nhaml autoRecompile="true">
<assemblies>
<clear/>
...
<add assembly="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</assemblies>
<namespaces>
<clear/>
...
<add namespace="System.Data"/>
</namespaces>
</nhaml>
очевидно, заменяя "..." другими вашими ссылками и конфигурацией
Другие советы
Единственное, о чем я мог подумать, это то, что в контексте страницы ссылка System.Data не видна.
Попробуйте добавить пространство имен в свой web.config:
<pages>
<controls />
<namespaces>
<add namespace="System.Data"/>
</namespaces>
</pages>
Я знаю, что это не совсем часть вашего вопроса, но я бы рекомендовал создать класс, наполненный свойствами, представляющими поля в вашей таблице данных.Используя Linq, вы можете легко преобразовать строки в объект класса и вернуть их список.Вот примерный (и некомпилированный) код.
[Serializable]
public class MyClass
{
public string Property1 { get; set; }
public string Property1 { get; set; }
}
Вы хотите, чтобы он был сериализуемым, чтобы ваш веб-сервис мог возвращать его в формате xml или json (как бы вы его ни возвращали).linq будет выглядеть примерно так:
var result = from r in dataSet.Table[0].Rows.AsEnumerable()
select new MyClass() {
Property1 = r["Field1"].ToString()
Property2 = r["Field2"].ToString()
};
return result.ToList();
По моему личному опыту, наборы данных обычно пожирают ресурсы.Кроме того, Linq будет более эффективным, чем циклы for.
Надеюсь это поможет.
Удалите ссылку (system.Data).. и снова добавьте ту же ссылку..возможно это работа..