2017年12月26日火曜日

Telerik ListBoxにデータを流し込む方法 ASP.NET MVC5の場合

Telerik ListBoxにデータを流し込む方法 ASP.NET MVC5の場合

Day.cshtml
   @(Html.Kendo().ListBox()
                    .Name("optional")
                    .Toolbar(toolbar => {
                        toolbar.Position(Kendo.Mvc.UI.Fluent.ListBoxToolbarPosition.Right);
                        toolbar.Tools(tools => tools
                        .TransferTo()
                        .TransferFrom()
                        .TransferAllTo()
                        .TransferAllFrom()
                        .Remove()
                        );
                    })
                    .ConnectWith("selected")
                )

                @(Html.Kendo().ListBox()
                    .Name("selected")
                    .Selectable(ListBoxSelectable.Multiple)
                    .BindTo(ViewBag.SelectUsers)
                )

DayController.cs
 //
                    List<SelectListItem> selectusers = new List<SelectListItem>();
                    var item = new SelectListItem();

                    item.Text = "担当者";
                    item.Value = "0101";

                    selectusers.Add(item);

                    ViewBag.SelectUsers = selectusers;

2017年12月25日月曜日

PHP mb_send_mail でのメール送信で日本語が化ける

PHP mb_send_mail でのメー^ル送信で日本語が化ける

PHPのソースがsjisなら
 mb_internal_encoding("SJIS");

上記の設定を追加する。

2017年12月21日木曜日

Centos7 Oracle11.2 起動起動の設定

Centos7 Oracle11.2 起動起動の設定

元ネタ
CentOS7にOracle11gをインストールする


自動起動の設定
/etc/oratabの編集


oratabでdbstartとdbshutスクリプトによる起動と停止の対象にするかどうかを指定します。vim /etc/oratab



#orcl:/home/oracle/app/oracle/product/11.2.0/dbhome_1:N orcl:/home/oracle/app/oracle/product/11.2.0/dbhome_1:Y




起動スクリプト作成
#! /bin/sh export PATH=/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/:${PATH} export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1 export NLS_LANG=Japanese_Japan.UTF8 export ORACLE_SID=orcl ${ORACLE_HOME}/bin/lsnrctl start ${ORACLE_HOME}/bin/dbstart ${ORACLE_HOME}




停止スクリプト作成
#! /bin/sh export PATH=/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/:${PATH} export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1 export NLS_LANG=Japanese_Japan.UTF8 export ORACLE_SID=orcl ${ORACLE_HOME}/bin/lsnrctl stop ${ORACLE_HOME}/bin/dbshut ${ORACLE_HOME}




systemdの設定
[Unit] Description=oracle After=network.target
[Service] Type=forking #EnvironmentFile=/etc/sysconfig/oracle ExecStart=/home/oracle/bin/startOracle.sh ExecStop=/home/oracle/bin/stopOracle.sh User=oracle [Install] WantedBy=multi-user.target

systemdの登録
systemctl enable oracle.service

2017年12月19日火曜日

久々にOrcaleチューニング
設定方法忘れたので、他からメモを拝借
DBAの知識ないから、DBの設定ぶっ壊して、1から入れなおしかなーなんて思える状態から脱却できたので、メモっておこう!

SGAの現在のメモリ割当を確認。
sqlplus / as sysdba
show parameter sga_;
NAME TYPE VALUE
------------- ------------ -------
sga_max_size big integer 2G
sga_target big integer 2G
ここで、以下のように容量変更を実行するのはダメ。
sqlplus / as sysdba
alter system set sga_max_size = 4G scope=spfile;
alter system set sga_target = 4G scope=spfile;
なぜなら、メモリの物理的な割当を超過したSGAを設定すると、壊れる
以下を実行し、memory_max_target、memory_targetがそれにあたる。
メモリ割当容量を変更する場合には、この物理的な割当容量を確認する手順は必須だ。
sqlplus / as sysdba
show parameter memory_;
NAME TYPE VALUE
------------------------- ------------ --------
hi_shared_memory_address integer 0
memory_max_target big integer 3G
memory_target big integer 3G
shared_memory_address integer 0

MEMORY_MAX_TAEGETMEMORY_TARGETの説明によると、MEMORY_TARGETがOracleが利用するメモリ割当量で、その範囲内でSGAやPGAを設定する。
つまり、いきなりSGAのメモリ割当量を変更し、MEMORY_TARGET割当量≦SGA割当量となると、設定としてはNGだ。
よって、まず変更すべきはSGAではなくMEMORY_TARGETだ。
また、SGAに4GBを割り当てたいなら、MEMORY_TARGETは4GBより大きくなければならない
それぞれの項目の説明はSGA_MAX_SIZESGA_TARGETを参照してほしい。
sqlplus / as sysdba
alter system set memory_max_target = 5G scope=spfile;
alter system set memory_target = 5G scope=spfile;
そのあとにSGAを変更する。
sqlplus / as sysdba
alter system set sga_max_size = 4G scope=spfile;
alter system set sga_target = 4G scope=spfile;
んでインスタンス再起動
sqlplus / as sysdba
shutdown immediate
startup
これで、Oracleで利用する物理メモリ容量の増加と、SGA容量の増加を行える。

で、これから俺がやらかした状態と、解消手順。
壊した経緯
1.もともと物理的に1.6GBくらいしか割り当ててない。
2.物理割当を確認せずにSGAを4GBに変更。
3.インスタンスの再起動ができなくなる。
再起動すると、こんなメッセージが。
ORA-00844: Parameter not taking MEMORY_TARGET into account
ORA-00851: SGA_MAX_SIZE 4294967296 cannot be set to more than MEMORY_TARGET 1690304512.
SGA_MAX_SIZEがMEMORY_TARGETを超えてんぞコラってことみたい。
こうなると、もうインスタンスへの接続もできないので、以下の手順を踏まないと直せない。
1.spfileからpfileを生成する。
/ as sysdba
create pfile from spfile;

  %ORACLE_HOME%\database\INIT<SID>.ORAが作成されます。
  %ORACLE_HOME%は、11gのデフォルトなら「D:\app\Administrator\product\11.2.0\dbhome_1」とかで、
  INIT<SID>.ORAは、インスタンス名が「HOGE」なら「INIThoge.ORA」ってファイルがある。
2.INIT<SID>.ORAをテキストエディタで編集する。
  以下では、MEMORY_TARGETを5GB、SGAを4GBに設定してみる。
<SID>.__sga_target=4294967296
*.memory_target=5368709120
*.sga_max_size=4294967296
*.sga_target=4294967296

3.INIT<SID>.ORAを利用してインスタンスを起動する。
  注意する点は、指定するのはファイル名だけではなくてフルパスで指定する。
sqlplus / as sysdba
startup pfile="D:\app\Administrator\product\11.2.0\dbhome_1\database\INIT<SID>.ORA"

4.起動できたら、pfileの設定をspfileに書き戻す。
  注意する点は、指定するのはファイル名だけでいい。
/ as sysdba
create spfile='SPFILE<SID>.ORA' from pfile='INIT<SID>.ORA';

5.んでいつも通りのインスタンスの再起動をしてみて、起動すればOK。
sqlplus / as sysdba
shutdown immediate
startup

2017年12月15日金曜日

ASP.NET MVC でKENDO UI GridViewから 行選択時の値を取得する

 @(Html.Kendo().Grid<Works.Models.BBSViewModel>()
        .Name("BBSGrid")
        .Columns(columns => {
            columns.Bound(p => p.ID).Title("ID").Width(40);
            columns.Bound(p => p.AttachFile).HeaderTemplate("<i class='fa fa-paperclip fa-lg'></i>").Width(20);
            columns.Bound(p => p.PublishedDate).Width(100).Format("{0:yyyy/MM/dd HH:mm}").Title("掲載日時");
            columns.Bound(p => p.Title).Title("件名");
            columns.Bound(p => p.SectionName).Width(90).Title("掲載部門");
            columns.Bound(p => p.EmployeeName).Width(70).Title("掲載者");
        })
        .HtmlAttributes(new { style = "height: 500px;" })
        .Scrollable()
        .Selectable(selectable => selectable
            .Mode(GridSelectionMode.Single)
            .Type(GridSelectionType.Row))
        .Events(events => events
            .Change("onChange")
         )
        .DataSource(dataSource => dataSource
            .Ajax()
            .PageSize(20)
            .Read(read => read.Action("BBS_Read", "BBS"))
        )
    )
</div>

<script type="text/javascript">

    function onChange(args) {
/*
        var selected = $.map(this.select(), function (item) {
            return $(item).text() + "|";
        });

        alert(selected);
*/
        var goods = this.select();
        goodsID = this.dataItem(goods).ID;

        alert(goodsID);
    }
</script>

Dapperでレコードインサート後にidentifyの値を取得する方法

string sql = @"
INSERT INTO [MyTable] ([Stuff]) VALUES (@Stuff);
SELECT CAST(SCOPE_IDENTITY() as int)";

var id = connection.Query<int>(sql, new { Stuff = mystuff}).Single();
InsertのSQLを発行後、SELECTでSCOPE_IDENTITY()を発行して
Identityの値を取得する。

1回のSQL内に二つのSQLを入れてやればOK

この発行は無かったからとても良いコーディングだと思います。

レコード追加後、Identityの値でフォルダを作成して、その中に添付ファイルを
保存するロジックが楽になりました。


2017年12月13日水曜日

ASP.NET MVCでJavascriptで使うUrlを動的に変更したい

ASP.NET MVCでJavascriptで使うurlを動的に変更したい


/Home/Index

/

この場合、Javascriptから画像を表示する場合
.././Images

./Images 別々に記述しないと画像にたどり着けない

Razarの場合は、 @Url.Content("~/Images") でOK

元ネタ http://www.processinginfinity.com/weblog/2014/07/17/Get-App-Base-URL-in-Script

index.cshtml
  <!DOCTYPE html>
  <html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <base href='@Url.Content("~/")'>
    <title>@ViewBag.Title - My ASP.NET Application</title>
    <!-- ... -->
  </head>
  <body>
      ...
app.js
(function () {
  'use strict';

  var baseUrl = $('base').attr('href');
  var appBaseUrl = baseUrl + 'scripts/myApp/';

  angular.module('myApp', ['ngRoute'])
    .config(['$routeProvider', function ($routeProvider) {
      $routeProvider.
        when('/list', {
            templateUrl: appBaseUrl + 'partials/list.html',
            controller: 'ListController'
        }).
        when('/details', {
            templateUrl: appBaseUrl + 'partials/details.html',
            controller: 'DetailsController'
        }).
        otherwise({
            redirectTo: '/list'
        });
    }]);
  })();

2017年12月9日土曜日

bootstrap admin template

Visual Studio 2017のギャラリーに AdminLTEのテンプレートがある。
これでMVCのテンプレートProjectを作ってくれる。

でも、自分が選択したのは SB Admin2でした。

SB Admin2をgithubよりDownload後
MVC Projectに SB Admin2のdist内のcssとjsをbundleに追加

vendorにある、metisMenuも同様

font-awesomeはnugetからインストールすればOkでした。

metisMenuもnugetからインストール出来ました。


2017年12月2日土曜日

MS-SQL / SQL Server / fnReplaceZenkakuToHankaku 全角の文字列を半角に変換する方法

CREATE FUNCTION [dbo].[fnReplaceZenkakuToHankaku]
(
@StrVal nvarchar(100)
)
RETURNS nvarchar(100)
BEGIN

DECLARE @Result nvarchar(100)
DECLARE @TempStr nchar(1)
DECLARE @i int
DECLARE @UniCode int
SET @Result = ''
SET @i = 1
WHILE (@i <= LEN(@StrVal))
BEGIN
SET @UniCode = UNICODE(SUBSTRING(@StrVal,@i,1))
IF (@UniCode = 12288) --空欄の場合。
SET @TempStr = N''
ELSE IF ((@UniCode >= 65280) AND (@UniCode <= 65519)) --全角の場合。
SET @TempStr = NCHAR(@UniCode-65248) 
ELSE 
SET @TempStr = SUBSTRING(@StrVal,@i,1)
SET @Result = @Result + @TempStr
SET @i = @i + 1
END
RETURN @Result
END