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月26日火曜日
2017年12月25日月曜日
PHP mb_send_mail でのメール送信で日本語が化ける
PHP mb_send_mail でのメー^ル送信で日本語が化ける
PHPのソースがsjisなら
mb_internal_encoding("SJIS");
PHPのソースがsjisなら
mb_internal_encoding("SJIS");
上記の設定を追加する。
ラベル:
mb_send_mail,
PHP,
文字化け
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
元ネタ
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がそれにあたる。
メモリ割当容量を変更する場合には、この物理的な割当容量を確認する手順は必須だ。
MEMORY_MAX_TAEGET、MEMORY_TARGETの説明によると、MEMORY_TARGETがOracleが利用するメモリ割当量で、その範囲内でSGAやPGAを設定する。
つまり、いきなりSGAのメモリ割当量を変更し、MEMORY_TARGET割当量≦SGA割当量となると、設定としてはNGだ。
以下を実行し、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_TAEGET、MEMORY_TARGETの説明によると、MEMORY_TARGETがOracleが利用するメモリ割当量で、その範囲内でSGAやPGAを設定する。
つまり、いきなりSGAのメモリ割当量を変更し、MEMORY_TARGET割当量≦SGA割当量となると、設定としてはNGだ。
よって、まず変更すべきはSGAではなくMEMORY_TARGETだ。
また、SGAに4GBを割り当てたいなら、MEMORY_TARGETは4GBより大きくなければならない。
それぞれの項目の説明はSGA_MAX_SIZE、SGA_TARGETを参照してほしい。
また、SGAに4GBを割り当てたいなら、MEMORY_TARGETは4GBより大きくなければならない。
それぞれの項目の説明はSGA_MAX_SIZE、SGA_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.インスタンスの再起動ができなくなる。
壊した経緯
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を生成する。
%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に設定してみる。
3.INIT<SID>.ORAを利用してインスタンスを起動する。
注意する点は、指定するのはファイル名だけではなくてフルパスで指定する。
4.起動できたら、pfileの設定をspfileに書き戻す。
注意する点は、指定するのはファイル名だけでいい。
5.んでいつも通りのインスタンスの再起動をしてみて、起動すればOK。
/ 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>
.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>
ラベル:
ASP.NET MVC,
kendo ui,
行選択,
選択,
値取得
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
例
/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
app.js
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からインストール出来ました。
これでMVCのテンプレートProjectを作ってくれる。
でも、自分が選択したのは SB Admin2でした。
SB Admin2をgithubよりDownload後
MVC Projectに SB Admin2のdist内のcssとjsをbundleに追加
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
2017年11月22日水曜日
ASP.NET MVC CRUD With Dapper (Micro ORM)
ASP.NET MVC CRUD With Dapper (Micro ORM)
- @model IEnumerable<DapperMvc.Models.Friend>
- @{
- ViewBag.Title = "Index";
- }
- <h2>Index</h2>
- <p>
- @Html.ActionLink("Create New", "Create")
- </p>
- <table class="table">
- <tr>
- <th>
- @Html.DisplayNameFor(model => model.FriendName)
- </th>
- <th>
- @Html.DisplayNameFor(model => model.City)
- </th>
- <th>
- @Html.DisplayNameFor(model => model.PhoneNumber)
- </th>
- <th></th>
- </tr>
- @foreach (var item in Model) {
- <tr>
- <td>
- @Html.DisplayFor(modelItem => item.FriendName)
- </td>
- <td>
- @Html.DisplayFor(modelItem => item.City)
- </td>
- <td>
- @Html.DisplayFor(modelItem => item.PhoneNumber)
- </td>
- <td>
- @Html.ActionLink("Edit", "Edit", new { id=item.FriendID }) |
- @Html.ActionLink("Details", "Details", new { id=item.FriendID }) |
- @Html.ActionLink("Delete", "Delete", new { id=item.FriendID })
- </td>
- </tr>
- }
- </table>
2017年11月15日水曜日
WebBrowserコントロールのレンダリングモードをデフォルトのIE7から最新IEモードに変更する
WebBrowserコントロールのレンダリングモードをデフォルトのIE7から最新IEモードに変更する
WebBrowserControlの初期値はIE7のレンダリングだった。
最新のレンダリングにするには、レジストリを変更する。
実行するexeがどのレンダリングを使用するか?を設定することで変更出来る。
2017年10月20日金曜日
CentOS /ets/fstab
/etc/fstabを修正して、root をコメントアウトして
ファイルチェック後、mountしようとしたらmount出来ない。
# mount -o remount,rw /
上記コマンドで再度mount後、/etc/fstabを編集する
2017年10月16日月曜日
OCI8 INSTALL方法
Oracle Instantclientをrpm でinstall
rpm -Uvh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
rpm -Uvh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
pear-php をyum でinstall
php-develをyumでinstall
pecl install oci-2.0.12
次にPath指定だが、以下の値を入力
instantclient,/usr/lib/oracle/11.2/client64/lib
^^^^ ココはversionによって違う
問題はOSが64bitなので、clientモジュールを64bit指定しないといけない。
でないとmakeでfaildedになる。
rpm -Uvh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
rpm -Uvh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
pear-php をyum でinstall
php-develをyumでinstall
pecl install oci-2.0.12
次にPath指定だが、以下の値を入力
instantclient,/usr/lib/oracle/11.2/client64/lib
^^^^ ココはversionによって違う
問題はOSが64bitなので、clientモジュールを64bit指定しないといけない。
でないとmakeでfaildedになる。
2017年10月12日木曜日
CentsOS + Oracle 11.2.0.4 patch 実行時エラーの対処方法
yum install binutils -y yum install compat-libstdc++-33 -y yum install compat-libstdc++-33.i686 -y yum install gcc -y yum install gcc-c++ -y yum install glibc -y yum install glibc.i686 -y yum install glibc-devel -y yum install glibc-devel.i686 -y yum install ksh -y yum install libgcc -y yum install libgcc.i686 -y yum install libstdc++ -y yum install libstdc++.i686 -y yum install libstdc++-devel -y yum install libstdc++-devel.i686 -y yum install libaio -y yum install libaio.i686 -y yum install libaio-devel -y yum install libaio-devel.i686 -y yum install libXext -y yum install libXext.i686 -y yum install libXtst -y yum install libXtst.i686 -y yum install libX11 -y yum install libX11.i686 -y yum install libXau -y yum install libXau.i686 -y yum install libxcb -y yum install libxcb.i686 -y yum install libXi -y yum install libXi.i686 -y yum install make -y yum install sysstat -y yum install unixODBC -y yum install unixODBC-devel -y yum install zlib-devel -y yum install elfutils-libelf-devel -y
i686のライブラリが無いとインストール時にコンパイルエラーになる。
2017年10月7日土曜日
CentOS7 + Oracle11g + PHP ハマりまくり
CentOS7 + Oracle11g + PHP ハマりまくりました。
1.CentOS7にOracle11gをインストールする。
参考資料 http://dbaora.com/install-oracle-11g-release-2-11-2-on-centos-linux-7/
2.Oracle11gとPHPを接続する為 OCI8のインストール
#yum install php-pear でinstall
#yum install php-devel が必要なので、インストールする
実行したのは、 pecl install oci8-1.4.10
今回の組み合わせは
OS CentOS7 64bit
Oracle11g 11.2.0.4
PHP 5.4.??? なので、OCI8も1.4.10をインストール
3.モジュールを読み込むため、/etc/php.iniの最後に追加
1.CentOS7にOracle11gをインストールする。
参考資料 http://dbaora.com/install-oracle-11g-release-2-11-2-on-centos-linux-7/
2.Oracle11gとPHPを接続する為 OCI8のインストール
#yum install php-pear でinstall
#yum install php-devel が必要なので、インストールする
実行したのは、 pecl install oci8-1.4.10
今回の組み合わせは
OS CentOS7 64bit
Oracle11g 11.2.0.4
PHP 5.4.??? なので、OCI8も1.4.10をインストール
3.モジュールを読み込むため、/etc/php.iniの最後に追加
extension=oci8.so
httpdの再起動
systemctl restart httpd
php -m でociモジュールが読み込んでいるか?確認できる。
4./etc/sysconfig/httpd にapache環境変数に設定を追加
ORACLE_HOME=/ora01/app/oracle/product/11.2.0/db_1 ORACLE_SID=ORA11G
ORACLE_HOSTNAME=testhostname
LD_LIBRARY_PATH=/ora01/app/oracle/product/11.2.0/db_1/lib
TNS_ADMIN= /ora01/app/oracle/product/11.2.0/db_1/network/admin
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/ora01/app/oracle/product/11.2.0/db_1/bin
NLS_LANG=Japanese_Japan.JA16SJISTILDE
※この時の注意点は、.bash_profileに追加した exportは無し
LD_LIBRAY_PATHが無いと ORA-12154
TNS_ADMINが無いと ORA-12154
NLS_LANGが無いと文字化け
PATHが未設定だと、PHPが動作しない
設定変更後
systemctl restart httpd でapache再起動
phpinfoでenvinromentでORACLE_HOMEは表示されていればOK
Linuxしたことないから、ここまで2日掛かった ...Orz
2017年10月6日金曜日
2017年9月25日月曜日
MYSQL カーソルのネスト
DELIMITER //
CREATE PROCEDURE test1()
BEGIN
DECLARE not_found INT DEFAULT 0;
DECLARE v_deptno INT;
DECLARE v_dname VARCHAR(14);
DECLARE cur1 CURSOR FOR SELECT deptno FROM emp ORDER BY empno;
DECLARE cur2 CURSOR FOR SELECT dname FROM dept WHERE deptno = v_deptno;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1;
OPEN cur1;
loop1: LOOP
FETCH cur1 INTO v_deptno;
IF not_found THEN
CLOSE cur1;
LEAVE loop1;
END IF;
OPEN cur2;
loop2: LOOP
FETCH cur2 INTO v_dname;
IF not_found THEN
SET not_found = 0; ← フラグを戻す
CLOSE cur2;
LEAVE loop2;
END IF;
INSERT INTO work (dname) VALUES (v_dname);
END LOOP;
END LOOP;
END
//
DELIMITER ;
CREATE PROCEDURE test1()
BEGIN
DECLARE not_found INT DEFAULT 0;
DECLARE v_deptno INT;
DECLARE v_dname VARCHAR(14);
DECLARE cur1 CURSOR FOR SELECT deptno FROM emp ORDER BY empno;
DECLARE cur2 CURSOR FOR SELECT dname FROM dept WHERE deptno = v_deptno;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1;
OPEN cur1;
loop1: LOOP
FETCH cur1 INTO v_deptno;
IF not_found THEN
CLOSE cur1;
LEAVE loop1;
END IF;
OPEN cur2;
loop2: LOOP
FETCH cur2 INTO v_dname;
IF not_found THEN
SET not_found = 0; ← フラグを戻す
CLOSE cur2;
LEAVE loop2;
END IF;
INSERT INTO work (dname) VALUES (v_dname);
END LOOP;
END LOOP;
END
//
DELIMITER ;
2017年9月23日土曜日
SSDなのにHDD並みの速度しか出ない?USB低速の謎 UASP対応ケース
SSDなのにHDD並みの速度しか出ない?USB低速の謎
UASP対応ケースhttp://itpro.nikkeibp.co.jp/atclact/active/17/091500143/091500006/?ST=suc-cost&P=3
2017年9月15日金曜日
ASP.NET MVCのエラーをログファイルに出力する
ASP.NET MVCのエラーをログファイルに出力する。
Ajaxリクエストの場合はデフォルトの例外処理は何もせず、
ステータスコードを500、応答本文を例外情報を含んだJSONにして、
$.ajax().fail()で例外処理をしやすくしておきます。
using System;
using System.IO;
using System.Net;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using System.Text;
namespace Jobs {
public class GlobalHandleErrorAttribute : HandleErrorAttribute {
public override void OnException(ExceptionContext filterContext) {
if (filterContext == null) {
throw new ArgumentNullException("filterContext");
}
// ルート・パラメータを取得
var route = filterContext.RouteData;
// 例外発生時は常にログを取っておく
StreamWriter objSw = new StreamWriter(HttpContext.Current.Server.MapPath("~/WebApp_Err.log"), true, Encoding.GetEncoding("utf-8"));
StringBuilder objBld = new StringBuilder();
objBld.Append(DateTime.Now.ToString());
objBld.Append("\t");
objBld.Append(filterContext.HttpContext.Request.RawUrl);
objBld.Append("\t");
objBld.Append(route.Values["controller"].ToString());
objBld.Append("\t");
objBld.Append(route.Values["action"].ToString());
objBld.Append("\t");
objBld.Append(filterContext.Exception.StackTrace);
objSw.WriteLine(objBld.ToString());
objSw.Close();
//LogUtil.LogControllerError(filterContext);
if (filterContext.HttpContext.Request.IsAjaxRequest()) {
/// Application_Errorは呼ばれない
HandleAjaxRequestException(filterContext);
}
else {
/// custom errorが有効でなければ
/// base.OnException()でExceptionHandledがtrueにならないので
/// Application_Errorも呼ばれる
base.OnException(filterContext);
}
}
private void HandleAjaxRequestException(ExceptionContext filterContext) {
if (filterContext.ExceptionHandled) {
return;
}
filterContext.Result = new JsonResult
{
Data = new {
Message = filterContext.ToString(),
JsonRequestBehavior = JsonRequestBehavior.AllowGet
}
};
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
}
}
}
FilterConfig.csのRegisterGlobalFilters()を編集します。
もともとある
代わりにGlobalHandleErrorAttributeを登録します。
これはGlobal.asax.csを修正する
using System.IO;
using System.Text;
void Application_Error(object sender, EventArgs e) {
StreamWriter objSw = new StreamWriter(Server.MapPath("~/WebApp_Err.log"), true, Encoding.GetEncoding("utf-8"));
Exception objErr = Server.GetLastError();
StringBuilder objBld = new StringBuilder();
objBld.Append(DateTime.Now.ToString());
objBld.Append("\t");
objBld.Append(objErr.Source);
objBld.Append("\t");
objBld.Append(objErr.Message);
objBld.Append("\t");
objBld.Append(objErr.TargetSite.ToString());
objSw.WriteLine(objBld.ToString());
objSw.Close();
}
元ネタ http://qiita.com/mocha/items/6928870b2d02d4c1ac37
HandleErrorAttribute.OnException
Controller内で起きた例外を処理する集約例外ハンドラを実装します。Ajaxリクエストの場合はデフォルトの例外処理は何もせず、
ステータスコードを500、応答本文を例外情報を含んだJSONにして、
$.ajax().fail()で例外処理をしやすくしておきます。
using System;
using System.IO;
using System.Net;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using System.Text;
namespace Jobs {
public class GlobalHandleErrorAttribute : HandleErrorAttribute {
public override void OnException(ExceptionContext filterContext) {
if (filterContext == null) {
throw new ArgumentNullException("filterContext");
}
// ルート・パラメータを取得
var route = filterContext.RouteData;
// 例外発生時は常にログを取っておく
StreamWriter objSw = new StreamWriter(HttpContext.Current.Server.MapPath("~/WebApp_Err.log"), true, Encoding.GetEncoding("utf-8"));
StringBuilder objBld = new StringBuilder();
objBld.Append(DateTime.Now.ToString());
objBld.Append("\t");
objBld.Append(filterContext.HttpContext.Request.RawUrl);
objBld.Append("\t");
objBld.Append(route.Values["controller"].ToString());
objBld.Append("\t");
objBld.Append(route.Values["action"].ToString());
objBld.Append("\t");
objBld.Append(filterContext.Exception.StackTrace);
objSw.WriteLine(objBld.ToString());
objSw.Close();
//LogUtil.LogControllerError(filterContext);
if (filterContext.HttpContext.Request.IsAjaxRequest()) {
/// Application_Errorは呼ばれない
HandleAjaxRequestException(filterContext);
}
else {
/// custom errorが有効でなければ
/// base.OnException()でExceptionHandledがtrueにならないので
/// Application_Errorも呼ばれる
base.OnException(filterContext);
}
}
private void HandleAjaxRequestException(ExceptionContext filterContext) {
if (filterContext.ExceptionHandled) {
return;
}
filterContext.Result = new JsonResult
{
Data = new {
Message = filterContext.ToString(),
JsonRequestBehavior = JsonRequestBehavior.AllowGet
}
};
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
}
}
}
FilterConfig.csのRegisterGlobalFilters()を編集します。
もともとある
filters.Add(new HandleErrorAttribute());
をコメントアウトして、代わりにGlobalHandleErrorAttributeを登録します。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//filters.Add(new HandleErrorAttribute());
filters.Add(new GlobalHandleErrorAttribute());
}
Application_Error
Controller外で起きた例外を補足するにはApplication_Error()を定義します。これはGlobal.asax.csを修正する
using System.IO;
using System.Text;
void Application_Error(object sender, EventArgs e) {
StreamWriter objSw = new StreamWriter(Server.MapPath("~/WebApp_Err.log"), true, Encoding.GetEncoding("utf-8"));
Exception objErr = Server.GetLastError();
StringBuilder objBld = new StringBuilder();
objBld.Append(DateTime.Now.ToString());
objBld.Append("\t");
objBld.Append(objErr.Source);
objBld.Append("\t");
objBld.Append(objErr.Message);
objBld.Append("\t");
objBld.Append(objErr.TargetSite.ToString());
objSw.WriteLine(objBld.ToString());
objSw.Close();
}
元ネタ http://qiita.com/mocha/items/6928870b2d02d4c1ac37
2017年9月14日木曜日
GetFilesで複数の拡張子を取得する方法
GetFilesで複数の拡張子を取得する方法
// C#だけど.
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text.RegularExpressions;
Regex regex = new Regex(@".*\.txt|.*\.log");
IEnumerable<string> p = from file in Directory.GetFiles(@"c:\windows\") where regex.IsMatch(file) select file;
foreach (string matched in p) {
Console.WriteLine(matched);
}
// C#だけど.
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text.RegularExpressions;
Regex regex = new Regex(@".*\.txt|.*\.log");
IEnumerable<string> p = from file in Directory.GetFiles(@"c:\windows\") where regex.IsMatch(file) select file;
foreach (string matched in p) {
Console.WriteLine(matched);
}
2017年9月5日火曜日
yaml_dbでエラー
yaml_dbをgemでinstallして rake db:data:dump を実行すると
rake aborted don't know how to build task と表示される。
解決方法
1. install yaml_db
gem install yaml_db
2. rails アプリのgemfileを編集
gem "yaml_db" を追加
3. rakeコマンドでdumpを行う
rake db:data:dump
rake aborted don't know how to build task と表示される。
解決方法
1. install yaml_db
gem install yaml_db
2. rails アプリのgemfileを編集
gem "yaml_db" を追加
3. rakeコマンドでdumpを行う
rake db:data:dump
2017年9月1日金曜日
go-global サーバサイドソリューション(SBS) 仮想アプリケーション
go-global サーバサイドソリューション(SBS) 仮想アプリケーション
https://www.graphon.com/
http://www.mitsuiwa.co.jp/solutions/goglobal/faq3.html
https://www.opensquare.co.jp/seminar/document/46/1_Go-Global.pdf
同時接続 20で250万
これって、remote Appsの5ユーザー10万の方が安いと思うぞ
https://www.graphon.com/
http://www.mitsuiwa.co.jp/solutions/goglobal/faq3.html
https://www.opensquare.co.jp/seminar/document/46/1_Go-Global.pdf
同時接続 20で250万
これって、remote Appsの5ユーザー10万の方が安いと思うぞ
看板(Kanban) & scrum勉強中
redmineのpluginで backlogsを使用して看板が使えると最近知った。
redmineの実行環境をポータブルにしたいので、rubyの実行環境をjrubyにしていたが
rumix2でポータブル環境を構築出来そうです。
usb memoryで現在、redmine + backlogsの環境を構築中です。
※openshiftがver2の上にredmineを構築していたが ver2廃止されるので
usbなら、どこでも redmineが使える。
openshift ver3のdockerを使って、redmineを構築する方が簡単ぽいのですが
dockerも勉強中、dockerのアプリケーションを仮想化する発送は面白いです。
アプリの仮想をUPすれば良いので、運用は楽になりそう。
redmineの実行環境をポータブルにしたいので、rubyの実行環境をjrubyにしていたが
rumix2でポータブル環境を構築出来そうです。
usb memoryで現在、redmine + backlogsの環境を構築中です。
※openshiftがver2の上にredmineを構築していたが ver2廃止されるので
usbなら、どこでも redmineが使える。
openshift ver3のdockerを使って、redmineを構築する方が簡単ぽいのですが
dockerも勉強中、dockerのアプリケーションを仮想化する発送は面白いです。
アプリの仮想をUPすれば良いので、運用は楽になりそう。
C# 全角から半角へ変換
C# 全角から半角へ変換
元ネタ http://www.atmarkit.co.jp/fdotnet/dotnettips/1051anhankaku/anhankaku.html
using System.Text.RegularExpressions;
using Microsoft.VisualBasic;
static string abc123ToHankaku(string s) {
Regex re = new Regex("[0-9A-Za-z:- ]+");
string output = re.Replace(s, myReplacer);
return output;
}
static string myReplacer(Match m) {
return Strings.StrConv(m.Value, VbStrConv.Narrow, 0);
}
元ネタ http://www.atmarkit.co.jp/fdotnet/dotnettips/1051anhankaku/anhankaku.html
using System.Text.RegularExpressions;
using Microsoft.VisualBasic;
static string abc123ToHankaku(string s) {
Regex re = new Regex("[0-9A-Za-z:- ]+");
string output = re.Replace(s, myReplacer);
return output;
}
static string myReplacer(Match m) {
return Strings.StrConv(m.Value, VbStrConv.Narrow, 0);
}
2017年8月28日月曜日
C# RIght関数
static string Right(this string stTarget, int iLength) {
if (iLength <= stTarget.Length) {
return stTarget.Substring(stTarget.Length - iLength);
}
return stTarget;
}
if (iLength <= stTarget.Length) {
return stTarget.Substring(stTarget.Length - iLength);
}
return stTarget;
}
2017年8月17日木曜日
Excel to CSV C#で作成
NPOIでExcel2003形式に対応
第1パラメータでExcelファイルを指定
第2パラメータでCSV出力ファオルを指定
第3パラメータでヘッダ行として行読み飛ばし
Excelが日付を数値で格納しているので、スタイルから日付を判別する。
日付だけしか扱わないお約束で、日付スタイルは yyyy/MM/dd にしている。
※日付表示は国によって違うので要注意です。
static void Main(string[] args) {
//入力ファイル確認
try {
if (!File.Exists(args[0])) {
return;
}
}
catch {
return;
}
//Shift JISで書き込む
//書き込むファイルが既に存在している場合は、上書きする
using (StreamWriter sw = new StreamWriter(
args[1],
false,
System.Text.Encoding.GetEncoding("shift_jis"))) {
// (WorkbookFactory.Create()を使ってinterfaceで受け取れば、xls, xlsxの両方に対応できます)
IWorkbook workbook = WorkbookFactory.Create(args[0]);
ISheet worksheet = workbook.GetSheetAt(0);
int lastRow = worksheet.LastRowNum;
string vLine = "";
int vY = 0;
try { vY = Convert.ToInt32(args[2]); } catch { vY = 0; }
for (int y = vY; y <= lastRow; y++) {
IRow row = worksheet.GetRow(y);
int maxCell = row.LastCellNum;
for (int x = 0; x < maxCell; x++) {
if (x == 0) {
if (row.Cells[x] != null) {
// 数値型
if (row.Cells[x].CellType == CellType.Numeric) {
// 日付型として値を取得
if (DateUtil.IsCellDateFormatted(row.Cells[x])) {
vLine = row.Cells[x].DateCellValue.ToString("yyyy/MM/dd");
}
else {
vLine = row.Cells[x].NumericCellValue.ToString();
}
}
vLine = row.Cells[x].ToString();
}
}
else {
if (row.Cells[x] == null) {
vLine = vLine.Trim() + ", ";
}
else {
// 数値型
if (row.Cells[x].CellType == CellType.Numeric) {
// 日付型として値を取得
if (DateUtil.IsCellDateFormatted(row.Cells[x])) {
vLine = vLine.Trim() + "," + row.Cells[x].DateCellValue.ToString("yyyy/MM/dd");
}
else {
vLine = vLine.Trim() + "," + row.Cells[x].NumericCellValue.ToString();
}
}
else {
vLine = vLine.Trim() + "," + row.Cells[x].ToString();
}
}
}
}
//ICell cell = row?.GetCell(0);
//Excelの内容を書き込む
sw.WriteLine(vLine);
}
}
}
登録:
投稿 (Atom)