‘C#’ カテゴリーのアーカイブ

ADO.Net Entity Frameworkでストアドプロシジャを実行するには

2009年12月9日 水曜日
  1. Visual Studioエンティティデザイナでコンテキストメニューを開いて、「データベースモデルからモデルを更新」を実行し、実行したいストアドプロシジャを追加する。
  2. モデルブラウザから「EntityContainer->関数インポート」上でコンテキストメニューを開いて、「関数インポートの作成」実行する。
  3. 「関数インポートの追加」ウィンドウが表示されるので、ストアドプロシジャ名を選択し、関数インポート名、戻り値の型を設定する。
  4. 関数インポートが追加される。
  5. Entity Clientを利用して、インポートした関数を実行する。

 using (EntityConnection conn =
    new EntityConnection(“name=AdventureWorksEntities”))
{
    conn.Open();
    try
    {
        // Create an EntityCommand.
        using (EntityCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = “AdventureWorksEntities.GetOrderDetails”;
            cmd.CommandType = CommandType.StoredProcedure;
            EntityParameter param = new EntityParameter();
            param.Value = “43659″;
            param.ParameterName = “SalesOrderHeaderId”;
            cmd.Parameters.Add(param);

            // Execute the command.
            using (EntityDataReader rdr =
                cmd.ExecuteReader(CommandBehavior.SequentialAccess))
            {
                // Read the results returned by the stored procedure.
                while (rdr.Read())
                {
                    Console.WriteLine(“Header#: {0} “ +
                    “Order#: {1} ProductID: {2} Quantity: {3} Price: {4}”,
                    rdr[0], rdr[1], rdr[2], rdr[3], rdr[4]);
                }
            }
        }
    }
    catch (EntityException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    conn.Close();
}

.Net frameworkのSyndicationFeedクラスを使ってYahoo Media RSS(MRSS)などの拡張フィードを取得するには

2009年11月27日 金曜日

SyndicationFeedに含まれるSyndicationItemのElementExtensionsプロパティを使って取得可能。

たとえば下記のように、サムネールを取得することが可能である。

        private static readonly XNamespace NS_YAHOO_MEDIA_RSS = “http://search.yahoo.com/mrss/“;

        public static string GetThubmnailUri(SyndicationItem item)
        {
            var extensions = item.ElementExtensions.Where<SyndicationElementExtension>(
               obj => obj.OuterNamespace == NS_YAHOO_MEDIA_RSS).ToArray();
            XmlReader reader = extensions[0].GetReader();
            XElement topElem = (XElement)XElement.ReadFrom(reader);
            XElement thumbElem = topElem.Elements(NS_YAHOO_MEDIA_RSS + “thumbnail”).FirstOrDefault();
            if (thumbElem != null)
            {
                XAttribute attr = thumbElem.Attribute(“url”);
                if (attr != null)
                {
                    return attr.Value;
                }
            }
            return string.Empty;
        }

.Net(C#)でRSS, Atomなどのフィードを取得/作成するには

2009年11月27日 金曜日

System.ServiceModel.Syndication.SyndicationFeedクラスを使用する。System.ServiceModel.Web.dll クラスを参照することが必要となる。フィードの取得は下記のように行う。

using (XmlReader reader = XmlReader.Create(“フィードのURI”))
            {
                SyndicationFeed feed = SyndicationFeed.Load(reader);
                SyndicationItem[] itemList = feed.Items.ToArray();
            }

これでitemListにフィードのエントリを格納したSyndicationItemの配列が返される。

フィードの作成にはSyndicationFeed クラスを利用してフィードを作成し、Atom10FeedFormatterクラス を利用してシリアライズするとAtom形式になり、Rss20FeedFormatter クラスを利用してシリアライズするとRSS2.0形式になる。

ASP.Net MVCをIIS 6.0で動かすと「404エラー」になるのを回避するには

2009年11月14日 土曜日
  1. 拡張子「.mvc」をASP.Netにマップする設定をIISのアプリケーションマップに追加するために、スクリプト「C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 1.0\Scripts\registermvc.wsf」を実行する。 ASP.Net MVC 2の場合はregistermvc.wsfがないので、下記のように手動で登録する。
    Webサイトのプロパティ->ホームディレクトリ->構成からアプリケーションの構成を開き、追加ボタンで「アプリケーションの拡張しマッピングの追加/編集を開く。
    実行可能ファイル:c:\windows\microsoft.net\framework\v4.0.30319\aspnet_isapi.dll
    拡張子:.mvc
    動詞:制限 GET,HEAD,POST
    スクリプトエンジン:チェック
    ファイルの存在を確認する:チェックなし
    に設定し、「OK」ボタンをクリックする。
  2. アプリケーションの「Global.aspx」のMapRouteを変更して、「.mvc」の拡張子をコントローラ名に追加して、「{controller}.mvc/{action}/{id}」のようにする。また、あらたにRootに対するマップを追加して、ルートUrlのアクセスを/Home/Indexにマップする。変更後のコードは下記。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{

public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
                "Default",
                "{controller}.mvc/{action}/{id}",
                new { action = "Index", id = "" }
              );

routes.MapRoute(
              "Root",
              "",
              new { controller = "Home", action = "Index", id = "" }
            );

}

protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

.Net Framework:いちばん内側の例外を簡単に取得するには

2009年10月9日 金曜日

いちばん内側の例外を簡単に取得するにはGetBaseException()メソッドを利用する。

catch(Exception ex)
{
          Exception baseEx = ex.GetBaseException();

}

C#でRFC3339の日付フォーマットを出力するには

2009年9月29日 火曜日

Atomなどで使われる日付形式RFC3339 を.Net Framework(C#)で出力するには下記のように行う。

string rfc3339 = System.Xml.XmlConvert.ToString(new DateTime(2001, 1, 1, 12, 3, 4, DateTimeKind.Local), System.Xml.XmlDateTimeSerializationMode.Utc);

 変換結果は下記。

2001-01-01T03:03:04Z

C#(.Net)で使えるPDF出力のためのライブラリ

2009年9月8日 火曜日
Visual Studio標準のレポート機能であるReportViewer
Visual Studio上の帳票エディタで帳票フォーマットを作成しレポート生成するタイプ。
ActiveReports for .Net
ReportViewerと同様にVisual Studio上の帳票エディタで帳票フォーマットを作成し、
レポート生成するタイプ。ReportViewerより高機能。
iTextSharp
オリジナルはJavaオープンソースライブラリのiText。
DOMでドキュメントを生成するような感じで、ドキュメントを生成するタイプ。