布団が俺を呼んでいる

丘山大一のぶろぐ

SSMSで既定の言語を表示した結果とSQLで表示した時に結果が違うことがある

SSMSの表示が正しくないとき(時々あるよね)案件。


問題

SSMSでログインのプロパティを覗いていたら、既定の言語が「Arabic」になっているものがあった。


Arabicかー、珍しいなー、と思ったが引っかかったのでSQLを投げて確認。

select name, default_language_name from sys.server_principals


う~ん、ひとつだけ浮いている方がいますね。
一人だけ素のenglish。ハイ、これがArabicだったログインです。

そしてログインを作っているSQLの中身を見てみたら既定のデータベースを「english」で指定していました。
多分us_englishで指定すべきところをenglishで指定した結果、ログインは作成されたけど言語の一覧にないのでプロパティ画面のコンボボックスがセット処理が正しく走らず、一番上の「Arabic」になったと思われます。
https://docs.microsoft.com/ja-jp/sql/relational-databases/system-compatibility-views/sys-syslanguages-transact-sql?view=sql-server-ver15
※記事投稿時点ではリンク先の表示が崩れてます

ちなみに、他のログインは既定の言語を指定しなかったのでデータベースの規定値を引っ張ってきて正しく設定された模様。


似たようなバグもあったけど

最初、コレかな?と思ったSSMSのバグもあったけどタブン違う。
* https://docs.microsoft.com/ja-jp/sql/ssms/release-notes-ssms?view=sql-server-ver15
* https://feedback.azure.com/forums/908035/suggestions/38236363


教訓

経験上、既定のデータベースの表示がおかしくなることもあるよ!
SSMSは便利だけど、疑問解消・原因調査の際はSQLで!

コメントを書く

布団が俺を呼んでいる | .Net Core で GetObject したいのですが

布団が俺を呼んでいる

丘山大一のぶろぐ

.Net Core で GetObject したいのですが

どうすればいいざんしょ?


経緯

.Net Core がWPF 対応したことだし、手元の古いアプリの移行可能性を検討しようと思い立つ。
で、そのアプリはサードパーティのComライブラリを呼び出している。
で、既存の動きに合わせてMicrosoft.VisualBasic.Interation からGetObjectを呼び出そうとしたら……あれ、無い?
ドキュメントにあたると、たしかに.Net Core の記述がない。


調査する

でがらし会で情報を持っている人募集。で、この人https://twitter.com/kowillmから情報がくる。

実装自体は進んでいるような感じ。
ただ、Not Tested ともある通り、完成していない感じはある。

実装もある程度進んでいる雰囲気はある。

しかし手元の.Net Framework の dllの中身と比較すると実装が異なる、というか足りない感じ。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.VisualBasic.dll


さてどうしよう

VisualBasic.dll の実装自体は(こう言ってはなんですが)意外と活発に見えます。
しかし最新のパッケージが2018/12/3と一年以上前であり、リリースできる状態までこぎつけていないのか、あるいはリリースを一時中断する理由があるのか判別がつかない。
というのも、ない理由が「仕掛りなだけ」ならいいのですが、「他のdllにメソッドを移植した」「.Net Core では別実装を検討中」「問題が見つかった」「.Net Coreで実装すべき機能ではない」などの理由だと(検証的に)困っちゃうんですよね。
.Net Core へのVB関連の取り組みがあまりされていない感じもあり、またWinFormに依存する部分は含めない的な方針もあるようで……Windowsのための実装のcom系に使われる機能はどういう取り扱いになるのか不透明&不透明。
Marshal.GetActiveObject がないから、というのも理由の一つな気もしますが。

無ければ作ればいいじゃないの精神で、必要な部分だけ引っこ抜いて個別実装してもいいのですが、「まだ無い」理由が分からないと徒労に終わる可能性も高いので、なかなか踏ん切りがつきません。
該当部分は.Net Frameworkで作れ! が正しいとも考えられますし。

どういう状況なんでしょ。

コメントを書く