【SQL Server】DTSXでDB接続PASSWORDをConifgから参照させるように手動で修正する

DTSXでDB接続PASSWORDをConifgから参照させるように手動で修正する

手元の開発PCのSql Server Business Intelligence Development Studioのパッケージ構成ツールが動かなくなっていました。。。
SQL SERVER 2008やVisual studio 2008やVisual studio 2010などを入れてしまったので、何かおかしくなってしまったのかと思います。

Sql Server Business Intelligence Development Studio 2005で過去に作成したDTSXを外部のConfigを参照させるようにしたいため、手で書き換えてやることにしました。
その備忘録です。

1)まずは、外部のConfigファイルを参照できる権限を与えます。
DTSXを作った当初は、


<DTS:Property DTS:Name="EnableConfig">0</DTS:Property>

   になっています。
   そこで、


<DTS:Property DTS:Name="EnableConfig">-1</DTS:Property>

   のように値を修正します。

2)DBのPASSWORDを保存している箇所を修正します。
   今までのPASSWORDの保存方法でどのように格納されているかで変わってきますが、

   <DTS:Password DTS:Name="Password" Sensitive="1" Encrypted="1">********</DTS:Password>

   等々になっているとこを

   <DTS:Password DTS:Name="Password" Sensitive="1"></DTS:Password>

   にしてやります。

3)Gonfigファイルの在処を追加します。
   DTSIDの値は、ConnectionManagerあたりののDTSIDのコピーで私の環境では動きました。

   
<DTS:ConnectionManager></DTS:ConnectionManager>

   の次に追加します。

   <DTS:Configuration>
     <DTS:Property DTS:Name="ConfigurationType">1</DTS:Property>
     <DTS:Property DTS:Name="ConfigurationString">ここにファイルの在処を記述</DTS:Property>
     <DTS:Property DTS:Name="ConfigurationVariable"></DTS:Property>
     <DTS:Property DTS:Name="ObjectName">構成 </DTS:Property>
     <DTS:Property DTS:Name="DTSID">{ConnectionManagerのDTSIDをコピー}</DTS:Property>
     <DTS:Property DTS:Name="Description"></DTS:Property>
     <DTS:Property DTS:Name="CreationName"></DTS:Property>
    </DTS:Configuration>

4)Configファイルを作成し指定したフォルダに保存します。

   <DTS:ConnectionManager>

   で記述した

<DTS:Property DTS:Name="ObjectName">DB接続名1</DTS:Property>

を指定します。
   ファイル内容は以下のとおり。ファイル名は適当にSetting.xmlとかに。

  <?xml version="1.0"?>
  <DTSConfiguration>
    <Configuration ConfiguredType="Property" Path="\Package.Connections[DB接続名1].Properties[Password]" ValueType="String">
     <ConfiguredValue>PASSWORD</ConfiguredValue>
    </Configuration>
  </DTSConfiguration>

以上で、実行時に指定されたConfigファイルのPASSWORDを見に行くようになります。

【Android】ドスパラ タブレット A07I-D15Aを買いました

先日、CUBE U18GT を買ったのですが引き続きドスパラ タブレット A07I-D15Aを買いました。
と言っても、少しでも安く買うために中古で買ったのですが、、、失敗でした。

もともと、筐体が弱いのか、ギシギシ軋むと評価やブログ等に書かれていたのですが、言うほどでも無いだろうと思って買ったのですが、とても酷く、普通に使うにはためらってしまうほどです。
ひょっとすると、前の所有者が殻割り(筐体を開ける)したためかもしれません。

ドスパラタブレットA07I-D15Aは、IPS液晶パネルという売りが、実はTN液晶パネルだったとか。
また、タッチポインとの位置ずれや認識しない箇所が有るなどなど、多くの障害報告が出ていた機種です。

で、なんでそんな機種買ったの?って思われるでしょうが、一応仕事で使うことを想定して、弾数が簡単に揃い、国内に窓口が有り、安いとなると、ショップブランドかマウスコンピュータのようなメーカーのものを検討して購入したかったので。。。
あと、ドスパラタブレットA07I-D15AはRootが最初から貰えてるようなので、それも手軽で良かったので。。。

でも、失敗ですね。
あんなに軟で軋むと、お客さんに提案出来ませんが、、、手に入れた機種だけが軋むと考えると。。。結局正規で買うしか。
安物買いの銭失いでしたね。
軋む以外は、結構気に入ってます。

CUBE U18GT とドスパラタブレットA07I-D15Aを中心に。。。(実はまだ機種を増やすつもりですが)。。。開発の勉強を進めようと考えています。
ではでは。

【Android】CUBE U18GTがADBでデバイスとして認識されない

先日購入した中華PADのCUBE U18GTの開発備忘録です。

CUBE U18GTをPCに接続して、ADB ShellでSDの中を見ようと思ったのですが、Androidの開発は初めてで良く分かりませんでした。
どうやら、ADB Shellを使うには、ADB USB ドライバなるものが必要そうなのですが、CUBE U18GT用のドライバが入手できませんでした。
CUBE U18GTのマニュアルには、ファームウェアのアップデート用のドライバが有るのですが、そのドライバでOKなのかも。。。判りませんでした。

しかし、Googleから汎用のADB USB ドライバが出ているので、それで接続を試みました。
その際の設定箇所のメモを残します。
「(SDKのインストール先)\sdk\extras\google\usb_driver\android_winusb.inf」ファイルに
———-
 [Google.NTx86](の下に追加)
 ;U18GT2
 %SingleAdbInterface% = USB_Install, USB\VID_2207&PID_0010
 %CompositeAdbInterface% = USB_Install, USB\VID_2207&PID_0010&MI_01

 [Google.NTamd64](の下に追加)
 ;U18GT2
 %SingleAdbInterface% = USB_Install, USB\VID_2207&PID_0010
 %CompositeAdbInterface% = USB_Install, USB\VID_2207&PID_0010&MI_01
———-
VIDやPIDの取得はググると直ぐに出てきますので、そちらを参考に取得

ここまでで繋がる人もいるらしいのですが、私の環境ではCUBE U18GTがADB devicesで見てもデバイスとして認識されなかったです。
そこで、更にググってadb_usb.iniファイルの最後にVIDを記述すると幸せになれると有りましたので実行します。
私の環境では、Documents and Settings\ユーザ名\.androidの中にadb_usb.iniファイルが有りました。
「DO NOT EDIT」と頭の行に有りましたが、、、構わず追加しました。
ちなみに、メモ帳では改行が上手く処理できないようなので、ワードパッドで編集しました。
 0x2207
を最後に追加

こでれ、ADB devicesで確かめると、今まで無かったデバイスが現れました。
ADB Shellで中を覗くと、CUBE U18GTで有ることが確認出来ました。めでたしめでたし^^

とりあえず、CUBE U18GTでADB Shellを使うための開発備忘録でした。

【Android】アンドロイド中華PADを買いました

アンドロイド中華PAD CUBE U18GT を買いました

最近、Androidの開発を行おうと思い、安い中華PADを買いました。
機種は、CUBE U18GTです。
実機が無くても開発の勉強はできますが、やはり実機が有った方がいろいろ勉強になると思って。

マイナーな機種のため、あまり?ほとんど情報が無く、かなり失敗した雰囲気が既に自分の中で漂っています^^;
スペック的には悪くないと思っていたのですが。。。安いし^^

スペック

仕様(スペック)は以下の通りです。
Cube U18GT Quad Core Species:
Model Cube U18GT Quad Core Tablet PC
CPU ATM7029 Cortex-A9 Quad Core; 1.2GHZ
GPU 3D GPU+2D GPU Support Open GL ES 2.0 3D
Operation System Android 4.1
RAM 1GB (DDR 3)
ROM 8GB Nand Flash
Shell Material Plastic
Screen Size 7.0 Inch
Type Retina Screen, IPS
Display IPS
Resolution 1024*600 TN
Multi-Touch Yes, 10 points touch
Visible Angle 180°
Extend Card Support TF card up to 32GB extended
Camera Front 3.0 Megapixel;
Bluetooth NO
Flash Support Flash 11.1
SKYPE Yes Support
Android Market Yes
Earphone Interface 3.5mm
Email and Browser Yes, built in
Music MP3/WMA/WAV/APE/AAC/FLAC/OGG
Ebook UMD, TXT, PDF, HTML, RTF, FB2…
Video 1080P, AVI/MOV/MP4/RMVB/FLV/MKV…
WIFI Yes, 802.11 b/g/n
3G Not built in, support external 3G dongle: WCDMA:(ZTE MF190)/MF110); EVDO:(HUAWEI EC122) E1916, ZTE AC2736, HUAWEI E1750, HUAWEI EC122, HUAWEI EM770W
Battery 3000MAH
Work Time Up to 3~5 hours
Other Applications File Manager, OfficeSuite, Google Search, Task Manager, Browser, Gallery, Android Webkit, Clock, Calculator, Calendar, iReader, Gmail…
Language Czech, Dansk, German, English, Spanish, Russian, French, Italian, Dutch, Norwegian, Hebrew, Polski, Greek, Portuguese, Svenska, Turkey, Korean, Japanese, Simplified Chinese, Traditional Chinese
Product Weight 320 G
Product Size 182.8*120*9.9(mm)

Cube U18GT Quad Core Extend Port
1 x 3.5mm Earphone port
1 x TF card slot;
1 x Micro USB port
1 x HDMI

とりあえず地道に勉強して行きたいと思っています。

以上、「アンドロイド中華PAD CUBE U18GT を買いました」でした。

[JAVASCRIPT] PDFをWebブラウザから自動で印刷する方法

PDFをWebブラウザに簡単に印刷する備忘録です。
仕事では、1)クライアント側で印刷したい旨の情報をサーバ側に伝える。2)サーバ側で動的にPDFを作成して、そのPDFをWebサーバに配置(決まった場所に保存)して、保存したURLをクライアント側(Webブラウザ)に伝え、3)Webブラウザで(自動で)印刷する。というパターンが多いと思います。

今回は、一連の手順を示したいと思います。
1)これは、Jquey.ajaxを使えば簡単にサーバとの連携ができます。
具体的には、

//PDF作成依頼
var fileURLdata ;
fileURLdata = JSON.parse($.ajax({
url: "サーバ側処理URL.aspx?targetid=" + targetid --今回はASP.NETで処理しています
+ "&amp;year=" + year --引数は処理に合わせて適当に
+ "&amp;month=" + month
+ "&amp;kbn=" + kbn
+ "&amp;sub_cd=" + sub_cd
, async: false --ファイルの作成を待つため同期処理で
}).responseText);

2)サーバ側でPDF作成
細々とした部分は割愛して書きます。

try
Dim fileURL As String = "0"

'パラメータ取得
'year, month, targetid, 等々の取得

'定義ファイル指定
ReportViewer1.LocalReport.ReportPath = "xxxxx.aspx.rdlc"

'パラメータセット
param.Add(New ReportParameter("Report_Parameter_0", "パラメータ文言"))
ReportViewer1.LocalReport.SetParameters(param)

'データバインド
Dim oQA As New TableAdapters.xxxxxTableAdapter
Dim oDT As New xxxxx.xxxxxDataTable
oDT = oQA.GetData(year, month, targetid, kbn) 'クライアント側からパラメータで貰ったもの

Dim oRDS As New ReportDataSource
oRDS.Name = "DataSet1_xxxxx"
oRDS.Value = oDT
ReportViewer1.LocalReport.DataSources.Add(oRDS)

'データ再セット
ReportViewer1.LocalReport.Refresh()

Dim warnings As Warning() = Nothing
Dim streamids As String() = Nothing
Dim mineType As String = Nothing
Dim encoding As String = Nothing
Dim extension As String = Nothing
Dim bytes As Byte()

'PDFデータ取得
bytes = ReportViewer1.LocalReport.Render("PDF", Nothing, mineType, encoding, extension, streamids, warnings)

'PDFデータ書き出し
Dim outputfile As String = "指定ディレクトリ"
Dim snt As String = Now().ToString("yyyyMMddHHmmss")
outputfile += snt + "_" + sub_cd + "-" + targetid + ".pdf"

fileURL = "指定URLディレクトリ"
fileURL += snt + "_" + sub_cd + "-" + targetid + ".pdf"
Dim fs As New IO.FileStream(outputfile, IO.FileMode.Create)
fs.Write(bytes, 0, bytes.Length)
fs.Close()

Catch ex As Exception
fileURL = "0"

Finally
Dim result As New List(Of printInfo)
Dim pi As New printInfo()
pi.fileURL = fileURL
pi.alert1 = ""
pi.alert2 = ""
result.Add(pi)

Dim serializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
Response.Write(serializer.Serialize(result))
Response.End()

---------------
Public Class printInfo
Public fileURL As String
Public alert1 As String
Public alert2 As String
End Class

3)Webブラウザで(自動で)印刷する

//ファイル作成成否確認
if (fileURLdata[0].fileURL == "0") { alert("印刷用PDF作成に失敗しました"); (window.open('', '_self').opener = window).close(); }

//ファイル名取得
var fileURL = fileURLdata[0].fileURL;

//OBJECTタグを作成
var tid = 'objPdf' + targetid + jQuery.now().toString();
var obj = document.createElement('object');
obj.setAttribute('id', tid);
obj.setAttribute('classid', 'clsid:CA8A9780-280D-11CF-A24D-444553540000'); // PDFのクラスID(固定値)
obj.setAttribute('height', '1');
obj.setAttribute('width', '1');

//PDFのソースを設定
var param = document.createElement('param');
param.setAttribute('name', 'src');
param.setAttribute('value', fileURL);
obj.appendChild(param);

//作成したOBJECTタグをDIVタグの中にセット
$("
<div id="pdfDiv&quot; + i + &quot;" style="border-style: none; height: 1px; width: 1px; background-color: #ffffff;"></div>
").appendTo($("#div_footter"));--差し障りの無い所へ追加
var div = document.getElementById('pdfDiv' + i);
div.appendChild(obj);
div.innerHTML = obj.outerHTML;

document.getElementById(tid).printAll();

以上です。

[SQL Server]SQLServerのNOLOCKロックヒント(ダーティーリードがしたい)

今日はSQLの処理がどこまで進んだか経過を見たい(keyのmax値を取得したい)等の場合、テーブルにロックが掛かってしまい値が取れない時に、ダーティーリードを行う備忘録です。
普段の処理ではあやふやなデータが返ってくるためほとんど使用しません。
そもそもコミット前なので、ロールバックすることも有るし。
で、データの一括修正を行って居て、現在どのへんまで終わったか、全体が終わるのはいつかなどの目安の時間を知るためなどに使用します。

sql文はヒント「NOLOCK」を付けるだけの簡単なものです。
 select * from テーブル名 WITH(NOLOCK)

簡単なテストをシたい場合は、以下のようにすることで確かめられます。
1)まずは、テスト用テーブル作成

create table ##tbl1(
 id int,
 val int 
)

2)次に、SQLの挿入処理・・・時間を稼ぐ為にWAITFOR DELAY 使用

begin tran
  --	delete from ##tbl1
  declare @i int
  set @i=0

  while @i<100
   begin	
    insert into ##tbl1 values(@i,1)
    WAITFOR DELAY '00:00:03'
    set @i=@i+1
   end
commit tran

3)select文の発行
上の挿入SQLと異なるクエリウィンドウを立ち上げてチェック実施
また、下のSQLの個別のクエリウィンドウで確認した方がわかりやすい。

select max(id) from ##tbl1                        --・・・・commit されるまで返って来ない
select max(id) from ##tbl1 WITH(NOLOCK) --・・・・直ぐに返って来る

※)注意
 NOLOCKヒントを付けても、テーブルのスキーマ変更やSQLServerが内部で統計情報を更新するときに発生するスキーマロックが掛かっていると、待たされます。
 なので、必ず想定する処理時間内に戻ってくるとは限りませんので、重要な仕事で使用時にはタイムアウト等考えておきましょう。

以上です。

[SQL SERVER] 1回のSQL発行で複数レコードをINSERTする方法

SQL SERVERで簡単なロジックテストを行う際、仮のテーブルを作成して動作を確認したい場合が有ります。
そんな時、今までは、
  declare @tbl1 table(id int, val int)
  insert into @tbl1 values(1,10)
  insert into @tbl1 values(1,20)
  insert into @tbl1 values(2,10)
  select * from @tbl1

のようにデータを作成していました。
それが、知らぬ間にSQL SERVER 2008から次のようなSQLでできるようになったそうです!
えー、ちなみに確認は、SQL SERVER 2012でしか行なっていません。。。

  declare @tbl1 table(id int, val int)
  insert into @tbl1 values(1,10)
  , (1,20)
  , (2,10)
  select * from @tbl1

元々コピペをすれば大した手間では無いですが、なんとなく損していた気がしています^^;

ではでは。

【ASP.NET】見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外: 0x80131040)

先月くらいから、私の開発環境で『見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外: 0x80131040)』のエラーが発生しました。
ちなみに私のエラーは、PC環境を変えたため、必要なDLLが見つからないというエラーではありません。

エラーの背景に社外・社内を問わずプログラム修正を行いたいため、開発に使用しているPCが数台あります。
ちゃんと費用を掛けてネットワーク構築及びVSSやTFSを立てたりすれば発生しないエラーかもしれないのですが、一人開発なので勿体無くて費用をかけていません。そのかわり利便性を向上させるために、どこからでもアクセスできるようインターネット上にディスクスペースを借りてそこにソースを置いています。
一人なので排他制御しなくていいし。

で、今まではWindows7+VS2010で主に開発をしていました。
最近は、Windows8+VS2012/VS2010の環境が入ってきて混在している状況です。
今までは上の問題が出て記憶が無いのですが、最近、社内はWindows8(64bit)、社外はWindows7(64bit/32bit)の混在でプログラムを修正するようなケースが発生したためか、3回程度発生しています。

64bit/32bitの混在が不味いのか。。。。Windows8+VS2010/windows7+VS2010の環境がいけないのか。。。
その両方なのか。。。

たまにしか発生していないのですが、64bit開発マシンで修正後32bit開発マシンで修正する際に発生しているので(頻発するわけだなくたまになので曖昧です。。。)、64bit/32bitの混在が不味い気がするのですが。。。

で、原因がはっきりわからない(きちんと調べても居ません)ので対処が正解かわからないのですが、いつも手っ取り早く修正したい時に発生するので、自分用にとりあえずの対処法を備忘録としてメモっておきます。

(対応)プロジェクトフォルダ内のbinフォルダに上のメッセージで読み込めないと名指しされているxxxxx.dllが存在しているので、そのdllファイルを削除してしまいます。

上の作業で、エラーが消えます。私のエラーの場合です。
一般的な、DLLが見つからない、読めない等々のエラーの場合は、本当に無いか、バージョン違いや64bit-dllを32bit環境で読もうとしてエラーが出ているなどなどなので、上の対応はもちろん該当しません。

以上、エラー対応備忘録でした。

【ASP.NET】Response.End()に呼出によるThreadAbortException 例外対応

今回は、ajax通信でサーバからデータを貰う際の簡易受けプログラムの備忘録です。

JavaScriptやJqueryでajax通信でデータを受け渡しする際、受け側のサーバプログラムにはWebServiceやWCFサービスなどを使う場合も多いと思いますが、基本的にクライアントとサービスのプロジェクトを別けるように設計していると思います。
でも、ちょっとしたデータの取得だけならわざわざサービス用のプロジェクトを立ち上げるのも面倒という場合もあるかと思います。
私はそんな場合は、通常のaspxをサービスで使用しています。
ちょっとした非同期通信で画面の遷移がなく画面の情報が更新されるプログラムにJSONと一緒に使用しています。
その他では、PDFファイルを裏で作成する際とかでも使用しています。

で、今回の備忘録ですが、Response.End()を呼出すとThreadAbortException 例外が発生してしまいます。
エラーハンドリングにTry chachを入れていると思いますが、引っかっかってしまいますよね。
 _HResult  -2146233040
 _message  スレッドを中止しようとしました。
なので、
Catch ex As ThreadAbortException
  ’ End()の呼び出しによる、ThreadAbortException 例外対応
で処理します。

どうという内容ではないのですが、備忘録としてメモっておきます。

ダイセルブルーム・ユーログループ議長って、いったい。。。

ダイセルブルーム・ユーログループ議長の『ユーロ圏財務相会合(ユーログループ)のダイセルブルーム議長は、キプロスの銀行リストラ計画は、ユーロ圏としての前例として見なされるべき、大規模な銀行セクターを有するユーロ加盟国は、再編実施し、全体の規模縮小が必要。ベイルイン(預金課税)課程が機能すれば、EMSによる銀行への直接資本注入の必要性は皆無となる可能性。』などの発言って、現職にありながら、なんか間違ってない?って思ってしまいました。

国が何らかの原因で経済が異常事態に陥り、債務不履行になることがしばしば有ります。
その理由は様々で、「その原因を引き起こした原因は何か(責任を誰が負うか)」、「他国に大きな影響を被るか」の状況でIMFやらその他の機関からの支援条件が変わるのが前提だと思います。

キプロスの件は、タックスヘイブンの絡みも有って多少複雑ですが、
原因は、国の施策として(他の国に迷惑を掛けても)海外の資金を集め、その資金で自国が潤うような投資を金融機関と共に大々的に行ったこと。(投資が失敗しなけりゃ問題なかったのにね。。。)
他の国に大きな影響が及ぶかを考えると、経済活動には大きく影響しないが、EUの運営に大きく影響しひいては経済活動にも影響をおよぼす。
と素人ながら考えています。

今回は、キプロスはダークな事をしたとはいえ、EU内の金融政策の縛りで自由にキプロス内で金融施策を行えなかったのも一因ですし、EU参加国ですから当然EUが救いの手を差し伸べるのが普通でしょう。
まぁ、ロシアでも良いんだけど、ロシアもタックスヘイブンをどうにかしたい腹も有るでしょうし、なかなか難しいですよね。
そして預金に関して課税するのは、海外からの資金が大きな原因となっている以上その責任を負わせるというのは自然な考えだと思います。自国内の一般預金者から課税するのは行き過ぎの気がしますが、実態を知っているEU調査団の判断も入っているので妥当とすべきと思います。
それにペナルティー無く助けるのは、ダークな事をしてる人達を他のEU諸国の人々の税金で助けることに成り支援国民の理解は得られないでしょう。
なので今回の処置は素人考えですが妥当と思います。

では本題の他のEU諸国が危機に陥った場合、同じ手法を使うのかを考えると原因が預金者に有るのか無いのかは明白だと思います。
一般の市民に負担をさせる場合、所得税や消費税などなど通常の税制の中でとりあえず実施され、それでもどうしても致し方がない(そんなケース戦争くらいしか思い浮かばないですけど。。。)場合、現在の資産税以外の資産税が発動されると思うのですが。
どちらにしても、まずは国民に広く相応の負担を求める場合は現在の税制の中で行われると思います。
一般の国に対しダイセルブルーム・ユーログループ議長の言うような事を実際に行ったら、えらいことになるのが簡単に想像できますよね?

ダイセルブルーム・ユーログループ議長っていったい何者なんでしょうね?
日本の大臣もたまに本音やら無知をさらけ出してしまい、恥ずかしい思いやら等々をしていますが、この人も同じですかね。
それと、一部の投資専門家が「発言は撤回されたけど、・・・懸念されている」旨の発言をしているのを他の記事で読みましたが、ダイセルブルームさんと同じくおかしいんじゃない?と思います。
一般の国でEUやIMFが預金に課税することを条件にするくらいなら、その国を助けないですよ。(人道支援はもちろんするでしょうがね。)そんな危険なことをIMF指導の元に安易に行ったら健全な国まで影響が及ぶでしょ?
専門家と名乗りつつ、全く不思議な事を言う人がネットには多いので、記事を読む際にはお互い気をつけたいですね。あっ!、このブログも内容怪しい^^?

ちなみに、投資で儲かるかどうかは、正しく市場判断をしているかどうかでなく、波に乗れるか否かなので、たとえ間違っていると思っても市場がそちらに流れたら乗って行くのがコツではないかと思います。
投資はあくまでも自己判断で。。。

ではでは。