ASP.NET MVC - System.Data.DataSet no se hace referencia al problema
-
05-07-2019 - |
Pregunta
Bueno, en primer lugar, lo siento por esta pregunta, debe ser bastante sencillo para ustedes, pero me estoy esforzando por hacerlo, y necesito hacer que funcione :( Bueno, estoy tratando de usar DataSet en mi aplicación
y cuando lo renderizo obtuve:
The type 'System.Data.DataSet' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Data
en mi aplicación, System.Data ya está siendo referenciado desde C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Data.dll
y también estoy usando en mis cláusulas de uso
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;
Este conjunto de datos es una respuesta de un servicio web ¿Alguna idea sobre cómo solucionar este problema?
PS. No sé si ayuda, pero estoy usando nHaml para mostrar mi vista
Muchas gracias
ACTUALIZACIÓN:
La única solución que encontré por el momento fue pasar un DataSet al convertidor de vista, el DataSet a un
<List<List<String>>
y pase un bucle a través de todo el DataSet como este
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);
En realidad esto es completamente loco, ¿no?
Todo este trabajo se podría hacer fácilmente en la vista si se usa DataSet directamente Espero que alguien pueda ayudarme con una forma más simplista de hacerlo
Gracias :)
ACTUALIZACIÓN (SOLUCIÓN)
La respuesta de Simon fue realmente efectiva y funcionó en el primer intento después de agregar espacios de nombres para System.Data y System.Xml, pero al mismo tiempo, la respuesta de Josh presenta una manera muy agradable y agradable de trabajar con DataSets, que en mi opinión Funciona mucho mejor y creo que lo haré ahora.
Gracias por tu ayuda
Solución
intente agregar una referencia explícita a System.Data en su configuración 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>
obviamente reemplazando " ... " con tus otras referencias y config
Otros consejos
Lo único en lo que podría pensar es que, en el contexto de la página, la referencia System.Data no está visible.
Intente agregar el espacio de nombres en su web.config:
<pages>
<controls />
<namespaces>
<add namespace="System.Data"/>
</namespaces>
</pages>
Sé que no es realmente parte de su pregunta, pero recomendaría crear una clase llena de propiedades que representen los campos en sus datos. Usando Linq, puedes convertir fácilmente tus filas en el objeto de clase y devolver una lista de ellas. Aquí hay un código en bruto (y no compilado).
[Serializable]
public class MyClass
{
public string Property1 { get; set; }
public string Property1 { get; set; }
}
Desea que sea serializable para que su servicio web pueda devolverlo como xml o json (sin embargo, lo está devolviendo). El linq se vería así:
var result = from r in dataSet.Table[0].Rows.AsEnumerable()
select new MyClass() {
Property1 = r["Field1"].ToString()
Property2 = r["Field2"].ToString()
};
return result.ToList();
En mi experiencia personal, los DataSets tienden a ser recursos de recursos. Además, Linq será más eficiente que tus bucles for.
Espero que esto ayude.
Borre la referencia (datos del sistema) ... y agregue la misma referencia nuevamente ... podría ser un trabajo ...