IT業界のすみっこ暮らし

ふと気がついたときの記録



ASP.NET MVCでCSVダウンロード

ASP.NET MVCでCSVダウンロード

test.cshtml

<button class="btnCsvDownloadList" type="button">CSVダウンロード</button>

<script src="~/Scripts/pages/test.js"></script>

test.js

$('.btnCsvDownloadList').click(function () {
    var documentUrl = document.URL;
    var baseUrl = documentUrl.substring(0, documentUrl.indexOf('currentPageName'));
    // baseUrl : 呼び出すControllerまでのurlを抽出したもの。urlが可変性のあるものの場合、お勧め。
    var mySiteUrl = 'http://mysite.com'
    // mySiteUrl : 固定のurlがある場合は固定値を設定する。
    location.href = mySiteUrl + '/CsvDownloadList';
});

TestController.cs

[Route("CsvDownloadList")]
public ActionResult CsvDownloadList(string areaType, string partner)
{
    var fileName = string.Format("{0:yyyyMMdd}.csv", DateTime.Now);
    return File(logic.GetCsvData(), "text/csv", fileName);
}

TestLogic.cs

public byte[] GetCsvData()
{
    var stream = new MemoryStream();
    var csvWriter = new StreamWriter(stream, Encoding.GetEncoding("shift-jis"));

    csvWriter.WriteLine(String.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8}",
        "1",
        "名前",
        "名前カナ",
        "012-3456-7890",
        "住所",
        "0",
        "何かの内容",
        "何かの内容2",
        "何かの内容3"));

    csvWriter.Flush();
    return stream.ToArray();
}

DB切替作業で思ったこと

システムのDBをA(既存DB)からB(新規DB)に切り替える場合の話

普通ならシステム側がアクセス先をAからBに切り替えるだけで済む。が、予期せぬトラブルが発生してBを再設定する必要があり、Aにまた戻したい場合も生きてれば経験するかも知れない。

こういうとき、一番困るのはBに存在するAとの差分だ。既にアプリがAからBに切替済みなら新しいデータがBにしか更新されてないはず…ここで下手にアプリをAにすぐ切り替えて、後手でBのデータをAに部分的に更新しようとしてもそこで整合性の問題からして連番の対応などなど…多大な手間が発生してしまう。その上データが本当に正しいかも怪しくなる。だからDB切替作業にトラブルが発生して、BからAに戻す場合は、最初時間が掛かるとも急いでただ設定だけ戻すのではなく、同時にBのデータをAに上書きすることも手順として必要だった。

ということが今日の反省。

結果的には運よく上記のように対応して解決できたけど、出来ることなら最初からこういうケースも考えておくべきだったと思う一日だった。


+ 長期間運用するシステムだといずれはサーバーやDBの移転イベントも発生するものだけど、環境周りはいつやっても緊張してしまうしトラブルが起こるとテンパる(´・c_・` ;)





プライバシーポリシー