ASP.NET MVC-System.Data.DataSetが参照されない問題
-
05-07-2019 - |
質問
まあ、まずこの質問について申し訳ありませんが、皆さんにとってはかなり簡単でなければなりませんが、私はそれで苦労しています、そしてそれを動作させる必要があります:( さて、アプリケーションでDataSetを使用しようとしています
そしてレンダリングすると次のようになります:
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句でも使用しています
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;
このDataSetはWebサービスからの応答です この問題を解決する方法に関するアイデアはありますか?
PS。それが役立つかどうかはわかりませんが、nHamlを使用してビューをレンダリングしています
どうもありがとう
更新:
今のところ私が見つけた唯一の解決策は、代わりにDataSetをビューコンバーターに渡し、DataSetをに変換することでした
<List<List<String>>
このようにDataSet全体にループを渡します
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);
実際、これは完全にクレイジーですよね
DataSetを直接使用する場合、このジョブはすべてビューに簡単に実行できます。 誰もがもっと簡単な方法で私を助けてくれることを願っています
ありがとう:)
更新(解決策)
Simonの答えは本当に効果的で、System.DataとSystem.Xmlの名前空間を追加した後の最初の試行で機能しましたが、同時に、Joshの答えはDataSetを操作する非常に素晴らしくクールな方法を提示します。はるかに良く動作し、私は今それのために行くと思います。
ご協力ありがとうございます
解決
nhaml構成のSystem.Dataへの明示的な参照を追加してみてください
<?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>
明らかに&quot; ...&quot;を置き換える他の参照と設定
他のヒント
考えられる唯一のことは、ページのコンテキストでは、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; }
}
Webサービスが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();
個人的な経験では、DataSetはリソースを大量に消費する傾向があります。また、Linqはforループよりも効率的です。
これがお役に立てば幸いです。
Reference(system.Data)を削除し、..同じ参照を再度追加します..動作する可能性があります。