昔はスマートなやり方はなかったが、SQL Server 2012からは以下の構文で取得が可能となったようだ。(但し、ORDER BY句の一部だが・・・)
-- クエリ結果の@START_OFFSET行目から@FETCH_NUMBER行分取得
SELECT COLUMN_1[,COLUMN_2[,...]] FROM TABLE_NAME
・・・
ORDER BY KEY_COLUMN
OFFSET @START_OFFSET ROWS
FETCH NEXT @FETCH_NUMBER ROWS ONLY
asp.net blazor server sideでセッション変数を使おうとして、チョット嵌ったので、メモ。
asp.net webappなどでは、Program.cs中でServiceにSessionを追加して、UseSessionメソッドを呼び出し、プログラム中からは、HttpContext.Sessionを介して、セッション変数を扱えるが、blazor server sideの場合、HttpContextにアクセスできないようなので、どうすればよいのか調べてみると、以下のような感じでセッション変数を保存,参照,削除できるようだ。
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedSessionStorage Session
・・・
// セッション変数操作(キーは当然string)
// セッション変数へ値を保存(このメソッドのValueはobject型)
await Session.SetAsync(Key,Value);
// セッション変数から値を取得
// valの型はProtectedBrowserStorageResult<T>となる
var val = await Session.GetAsync<T>(Key);
if (!val.Success) {
// 取得失敗
}
T? v = val.Value;
// セッション変数を削除
await Session.DeleteAsync(Key);
MS Graphを使用して、Office365のユーザーを追加するプログラムを書いてみた。MSのドキュメントにはユーザー作成時にライセンスを付与できるとも、できないとも書いていないので、一応、ライセンス付きで試してみたが、NG。(Bing AI君に聞いてみたら、「ユーザー作成時にはライセンス付与できません。」と言われた。「ドキュメントにはハッキリとは書いてありませんが・・・」だと。AI君が正しいかどうかは分からんが。)
仕方がないので、ユーザーを追加してから、ライセンスを付与する形にしてみた。
以下動作したプログラム
//
// ユーザーの作成とライセンス付与
// どうも、ユーザー作成時にライセンスを付与することはできないようだ。
// (ドキュメントには明記されていないようだが・・・)
// 仕方ないので、ユーザーを作成して、その後、ライセンスを付与することとする。
// ちなみに、こちらもドキュメントには書かれていないが、ユーザー作成時にはUsageLocationと
// PreferredLanguageは必須!
// これがないと、ユーザーをEnableにできないし、ライセンス付与もできない。
//
var cred = new UsernamePasswordCredential(ManageUser,ManagePass,TenantID,AppID,options);
var cli = new GraphServiceClient(cred);
var request = new User() {
UserPrincipalName = "boo@foo.com",
MailNickname = "boo",
AccountEnabled = true,
DisplayName = "Boo.Foo(Mr.Boo)",
Surname = "Foo",
GivenName = "Boo",
PasswordProfile = new PasswordProfile() {
Password = MakePassword(),
ForceChangePasswordNextSignIn = true
},
UsageLocation = "JP", // 必須!
PreferredLanguage = "ja-JP", // 必須!
};
var res = await cli.Users.PostAsync(request);
// ユーザー追加要求後すぐにライセンス付与を行おうとするとエラーになったので、
// とりあえず、1秒程まってから、ライセンスを追加する。
Thread.Sleep(1000);
var licreq = new Microsoft.Graph.Users.Item.AssignLicense.AssignLicensePostRequestBody() {
AddLicenses = new List<AssignedLicense>() {
new AssignedLicense() {
DisabledPlans = new(), // ←これは無くても大丈夫
SkuId = Guid.Parse("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
}
},
RemoveLicenses = new() // ←削除するライセンスが無くても空配列が必要なようだ。
};
await cli.Users["boo@foo.com"].AssignLicense.PostAsync(licreq);
// GraphServiceClientの作成(Credentialの作成方法は省略)
var cli = new GraphServiceClient(cred);
// 契約しているライセンス情報一覧の取得
var lic = await cli.SubscribedSkus.GetAsync();