RSS

作成者別アーカイブ: makandat

ASP.NET:HTMLタグを含む文字列がSQL Serverのテーブルに書き込みできない件

ASP.NET ではデフォルトでデータベースへ格納する文字列の検証をしているようで、HTMLのscriptタグを含んだ文字列をテーブルへ書こうとするとエラーになってしまいました。

aspnet_sqlserver_script

これを回避するには、ValidateInput 属性を false にしてやるとよいようです。

        [ValidateInput(false)]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult ViewAddClip(Pixels p)
        {
       ....
        }
 
コメントする

投稿者: : 2017/01/29 投稿先 未分類

 

ASP.NET: ASP.NET App_Codeフォルダ

App_Code フォルダには、ソースコードを置くためのフォルダだそうです。(詳しくは下記)

https://msdn.microsoft.com/ja-jp/library/t990ks23(v=vs.100).aspx

VB や C# ソースを置いておけば自動的にコンパイルされるそうですが、そうでないファイル(つまりプログラミング言語のソースでない XML など) はもちろんコンパイルはされないと書いてあります。

問題は、Visual Studio でここに置いた VB や C# ソースをデフォルトで参照できない問題があります。下のように App_Code に Class1.cs を追加したとします。

app_code

エディタで Class1 をコードに追加すると、見つからないので赤線が表示されます。

class1_notvisible

これを回避するには、Class1 のプロパティで「ビルドアクション」を「コンパイル」に変更します。デフォルトは「コンテンツ」です。上の説明にはデフォルトでコンパイルされると書いてあるので、微妙な仕様(バグ?)ですね。

class1_compile

 
コメントする

投稿者: : 2017/01/29 投稿先 ASP.NET

 

SQL Server: bcp ユーティリティの使用例

フォーマットファイルなしでインポート、エクスポートする例です。
-c 無しの場合は、プロンプトが表示されて自動的にフォーマットファイルが作成されます。
インポートファイルの文字コードはシフトJIS、フィールド区切りはカンマ、行末はCRLFを仮定しています。
ファイルの先頭行はヘッダで、これを無視するようにしています。

インポートの場合

@echo off
rem -S {data source}
rem -T trusted connection
rem -F {header count}
rem -d {initial catalog}
rem -f {format file}
rem -k keep NULL
rem -t {field termination char}
rem -c no prompts
rem -E keep ID (Primary key) value
bcp dbo.Codes in c:\temp\Codes.csv -S localhost -d S3App -T -F 1 -k -t , -c -E

bcp はけっこう気難しいコマンドで行末の違い(LFかCRLFか)でエラーになったりします。)

コピーを開始しています...
12 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 1      平均 : (12000.00 行/秒)

エクスポートの場合

エクスポートの場合は方向指示を in でなく out にします。
あとは同じで大丈夫でした。

C:\temp> bcp dbo.Codes out c:\temp\CodesOut.csv -S localhost -d S3App -T -F 1 -k -t , -c -E
 
コメントする

投稿者: : 2017/01/01 投稿先 Database

 

PowerShell: 配列の内容を指定通りに並べ替える。

JSON ファイルで指定した順番に配列の内容を入れ替えるサンプルです。

# alloc.json で指定された順序で配列を並び替える。
$alloc = get-content -raw alloc.json | ConvertFrom-Json
get-content alloc.json
$data = "ふぐ", "さば", "はぜ", "いわし", "あじ"
$data -join ","
$arr = new-object System.String[] 5

for ($i = 0; $i -lt $alloc.length; $i++) {
  $p = $alloc[$i]
  $arr[$p] = $data[$i]
}

$arr

実行例

allocarray

 
コメントする

投稿者: : 2016/12/21 投稿先 PowerShell, 未分類

 

ASP.NET : IIS に発行したウェブアプリで SQL Server にアクセスできない件

Visual Studio で動作確認した ASP.NET ウェブアプリが IIS に発行した後、動作しなくなる現象があります。SQL Server 認証だといいんですが、Windows 認証では設定が必要です。

それは、web.config の設定の違いかユーザ権限の違いのためです。Visual Studio ではログインユーザの権限でウェブアプリも動作しますが、IIS では別の特殊なユーザ権限で動作します。

SQL Server 認証ならどちらのユーザで動いていても関係ないのですが、Windows 認証の場合は、ユーザが異なるのでログインできなくなります。

このユーザというのが最初 IUSR かと思っていたら、DefaultAppPool という偽装ユーザでした。ということで、Management Studio で、このユーザをデータベースのユーザに追加したらウェブアプリが動くようになりました。

このユーザは「検索」しても出てこないので直接入力します。

ただし、ただ登録するだけでなくスキーマの所有権も設定することを忘れないようにします。

defaultapppoolreg

defaultapppool

残念ながらこれだと、IIS と SQL Server が異なるサーバで動作している場合、うまく動作しません。その場合は、SQL Server が動作している DB サーバの有効なアカウントを IIS に設定してやらないと認証されません。(以下の設定を行うと上記の設定は使用されないので不要です)
まず、コンピュータの管理で「インターネッインフォメーションサービス」を選んで、ツリーの上の方にある「アプリケーションプール」をクリックします。

iis_defaultapppool

DefaultAppPool を選択してアプリケーションプールのプロパティ(右側のペイン)で「詳細設定」を実行します。プロセスモデルのIDをクリックするとボタン(…)が表示されるので、それをクリックします。

iis_defaultapppool_settings

ここにDB サーバの有効なアカウント情報を入力すると、IIS から DB サーバ上の SQL Server に Windows 認証で接続できるようになります。

iis_defaultapppool_custom

 
コメントする

投稿者: : 2016/12/11 投稿先 ASP.NET, Database

 

SQL Server でテーブル列の名前を変更するには

MySQL などでは ALTER TABLE でテーブル列の名前を変更できますが、SQL Server ではストアドプロシージャを使う必要があります。

(例) dbo.Users テーブルで列名 CreateDate をCreationDateに変更する。

USE [USER];
GO
EXEC sp_rename '[dbo].[Users].CreateDate', 'CreationDate', 'COLUMN';
GO
 
コメントする

投稿者: : 2016/12/11 投稿先 Database

 

LOAD DATA INFILE での注意点

MySQL の LOAD DATA INFILE コマンドで CSV ファイルをインポートする場合の注意点ですが、

  • テーブルの文字コードとCSVファイルの文字コードが合っているか?
  • CSVファイルの行の終端がLFか?(WindowsではデフォルトでCRLFになるので注意)
  • 特殊な文字があるとうまくいかない可能性がある。例えば、絵文字 など。
  • 文字コードを実行前に指定しておく。
  • 区切り文字や囲み文字の指定が必要か?

です。

使用例

mysql> SET character_set_database=UTF8;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> load data local infile '/home/user/temp/TABLE1.csv' 
into table TABLE1 fields terminated by ',';
Query OK, 104 rows affected, 10 warnings (0.07 sec)

FIELDS の指定例

FIELDS
    TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'
    ESCAPED BY ''
 
コメントする

投稿者: : 2016/11/22 投稿先 MySQL