<?xml version="1.0" encoding="utf-8" ?><rss version="2.0">
<channel>
<title>C# 入門</title>
<link>https://csharp.sql55.com/</link>
<language>ja</language>
<item><title>C# で iOS の Push Notification（プッシュ通知）を送信する方法</title><link>https://csharp.sql55.com/cookbook/how-to-send-ios-push-notification-using-csharp.php</link><description>C# で iOS の Push Notification（プッシュ通知）を送信する方法&lt;br&gt;&lt;br&gt;C# で iOS の Push Notification（プッシュ通知）を送信する&lt;br&gt;ここでは、C# を使って、iOS デバイスに Push Notification（プッシュ通知）を送信する方法をご説明します。 &lt;br&gt;&lt;br&gt;&lt;br&gt;目次&lt;br&gt;iOS の Push Notification（プッシュ通知）を送る準備をする&lt;br&gt;C# を使って Push Notification（プッシュ通知）を送信する&lt;br&gt;&lt;br&gt;iOS の Push Notification（プッシュ通知）を送る準備をする&lt;br&gt;iOS の Push Notification（プッシュ通知）は次の順番で送られます。&lt;br&gt;&lt;br&gt;Provider server から Apple Push Notification service (APNs) にプッシュ通知のリクエストを post する&lt;br&gt;Apple Push Notification service (APNs) がユーザーの iOS デバイスにプッシュ通知を送る&lt;br&gt;iOS デバイスでプッシュ通知を受信し、表示される&lt;br&gt;この記事では 1 番の APNs に post する部分のプログラムをご説明します。&lt;br&gt;&lt;br&gt;Apple Push Notification service (APNs) に Push Notification（プッシュ通知）を送信するには、HTTP/2 と TLS 1.2 以降で接続して Post リクエストを送ります。&lt;br&gt;&lt;br&gt;Post するのに何を使って実装しても良いですが、ここでは C# を使ってプッシュ通知を送信します。&lt;br&gt;&lt;br&gt;&lt;br&gt;Push Notification（プッシュ通知）を送信する際には以下のものが必要になります。&lt;br&gt;&lt;br&gt;iOS デバイスのデバイストークン&lt;br&gt;プッシュ通知を受信する iOS アプリの Bundle Identifier&lt;br&gt;Apple Push Notification service 証明書からエクスポートされた p12 ファイルとパスワード&lt;br&gt;まだ、Apple Push Notification service 証明書の生成・インストールや、プッシュ通知を受信する iOS アプリを生成、デバイストークンの取得をしていない方は「Push Notification（プッシュ通知）を実装する方法」をご参考に、済ませておいてください。&lt;br&gt;&lt;br&gt;&lt;br&gt;C# を使って Push Notification（プッシュ通知）を送信する&lt;br&gt;Visual Studio で Consol App を新規作成します。&lt;br&gt;&lt;br&gt;HTTP/2 で Post しなければならないので、HttpRequestMessage で Verson 2.0 をサポートしている Framework を選択してください。&lt;br&gt;&lt;br&gt;.NET Framework はサポートしていません。 .NET Core は古いバージョンでなければサポートされています。&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;C# を使って、iOS デバイスに Push Notification（プッシュ通知）を送信するには、次のようにできます。&lt;br&gt;&lt;br&gt;using System.Security.Authentication;&lt;br&gt;using System.Security.Cryptography.X509Certificates;&lt;br&gt;&lt;br&gt;class Program&lt;br&gt;{&lt;br&gt;    static void Main(string[] args)&lt;br&gt;    {&lt;br&gt;        try&lt;br&gt;        {&lt;br&gt;            var apnsURL = &quot;api.sandbox.push.apple.com:443&quot;; // Development server&lt;br&gt;            var deviceToken = &quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;;&lt;br&gt;            var certPath = &quot;C:\Test\PushTest\PushTestCertificate.p12&quot;;&lt;br&gt;            var certPassword = &quot;Password&quot;;&lt;br&gt;            var bundleIdentifier = &quot;com.softmoco.PushTest&quot;;&lt;br&gt;            var payload = &quot;{\&quot;aps\&quot;:{\&quot;alert\&quot;:\&quot;Push Notification Test from C#!!!\&quot;,\&quot;sound\&quot;:\&quot;default\&quot;,\&quot;badge\&quot;:1}}&quot;;&lt;br&gt;&lt;br&gt;            var url = string.Format(&quot;https://{0}/3/device/{1}&quot;, apnsURL, deviceToken);&lt;br&gt;&lt;br&gt;            var certData = File.ReadAllBytes(certPath);&lt;br&gt;            var cert = new X509Certificate2(certData, certPassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);&lt;br&gt;&lt;br&gt;            using (var httpHandler = new HttpClientHandler { SslProtocols = SslProtocols.Tls12 })&lt;br&gt;            {&lt;br&gt;                httpHandler.ClientCertificates.Add(cert);&lt;br&gt;&lt;br&gt;                using (var clent = new HttpClient(httpHandler, true))&lt;br&gt;                {&lt;br&gt;                    using (var request = new HttpRequestMessage(HttpMethod.Post, url))&lt;br&gt;                    {&lt;br&gt;                        request.Version = new Version(2, 0);&lt;br&gt;                        request.Headers.Add(&quot;apns-topic&quot;, bundleIdentifier);&lt;br&gt;                        request.Content = new StringContent(payload);&lt;br&gt;&lt;br&gt;                        try&lt;br&gt;                        {&lt;br&gt;                            using (var result = clent.SendAsync(request).GetAwaiter().GetResult())&lt;br&gt;                            {&lt;br&gt;                                var content = result.Content.ReadAsStringAsync().Result;&lt;br&gt;                                Console.WriteLine(string.Format(&quot;StatusCode: {0}, Content: {1}&quot;, result.StatusCode, content));&lt;br&gt;                            }&lt;br&gt;                        }&lt;br&gt;                        catch (Exception e)&lt;br&gt;                        {&lt;br&gt;                            Console.WriteLine(string.Format(&quot;Exception 1: {0}&quot;, e.ToString()));&lt;br&gt;                        }&lt;br&gt;                    }&lt;br&gt;                }&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;        catch (Exception e)&lt;br&gt;        {&lt;br&gt;            Console.WriteLine(string.Format(&quot;Exception 2: {0}&quot;, e.ToString()));&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;C# で iOS の Push Notification（プッシュ通知）を送信する方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;apnsURL には、Apple Push Notification service (APNs) サーバーの URL を指定します。&lt;br&gt;&lt;br&gt;post する URL は以下の [APNs サーバの URL]/3/device/[device token] になります。&lt;br&gt;&lt;br&gt;現在の APNs のサーバの URL は以下の通りです。&lt;br&gt;&lt;br&gt;Development server: api.sandbox.push.apple.com:443&lt;br&gt;Production server: api.push.apple.com:443&lt;br&gt;&lt;br&gt;deviceToken には「Push Notification（プッシュ通知）を受信する iOS アプリを作る」で取得したデバイストークンを指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;certPath には p12 ファイルのファイルパスを、certPassword には p12 ファイルをエクスポートした時に指定したパスワードを指定します。&lt;br&gt;&lt;br&gt;p12 ファイルは「証明書から p12 ファイルをエクスポートし pem ファイルに変換する」でエクスポートしたものを使います。&lt;br&gt;&lt;br&gt;この記事の方法で post する場合は、pem ファイルに変換する必要はありません。&lt;br&gt;&lt;br&gt;C# で iOS の Push Notification（プッシュ通知）を送信する方法 2&lt;br&gt;&lt;br&gt;&lt;br&gt;bundleIdentifier には、「Xcode で Bundle Identifier を設定する」で設定した Bundle Identifier (com.softmoco.PushTest) を指定します。&lt;br&gt;&lt;br&gt;プッシュ通知の payload は今回は次のものを送信します。&lt;br&gt;&lt;br&gt;{&lt;br&gt;  &quot;aps&quot;: {&lt;br&gt;    &quot;alert&quot;: &quot;Push Notification Test from C#!!!&quot;,&lt;br&gt;    &quot;sound&quot;: &quot;default&quot;,&lt;br&gt;    &quot;badge&quot;: 1&lt;br&gt;  }&lt;br&gt;}&lt;br&gt;&lt;br&gt;コードをざっとご説明します。&lt;br&gt;&lt;br&gt;19 ~ 20 行目では、p12 ファイルから X509Certificate2 オブジェクトを生成しています。&lt;br&gt;&lt;br&gt;22 行目では httpClientHandler オブジェクトを SslProtocols.Tls12 を指定して生成しています。&lt;br&gt;&lt;br&gt;24 行目では、先ほどの X509Certificate2 オブジェクトを httpHandler の ClientCertificates に追加しています&lt;br&gt;&lt;br&gt;26 行目では、先ほどの httpClientHandler オブジェクトを指定して HttpClient オブジェクトを生成しています。&lt;br&gt;&lt;br&gt;28 行目では Post メソッドと URLを指定して、HttpRequestMessage オブジェクトを request という名前で生成しています。&lt;br&gt;&lt;br&gt;30 行目では HTTP/2 を使うように request の Version を 2.0 に指定しています。&lt;br&gt;&lt;br&gt;31 行目では request の Headers に キー: apns-topic、値: bundleIdentifier を追加します。&lt;br&gt;&lt;br&gt;32 行目では request の Content に payload から StringContent オブジェクトを生成して代入しています。&lt;br&gt;&lt;br&gt;36 行目では post リクエストを送信して、結果を取得しています。&lt;br&gt;&lt;br&gt;38 行目では レスポンスの Content を文字列として取得しています。&lt;br&gt;&lt;br&gt;39 行目では レスポンスの StatusCode と Content を出力しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;これを実行すると、次のように PushTest (com.softmoco.PushTest) の iOS アプリをインストールした iPhone で Push Notification（プッシュ通知）を受信できました。&lt;br&gt;&lt;br&gt;C# で iOS の Push Notification（プッシュ通知）を送信する方法 3&lt;br&gt;&lt;br&gt;C# で iOS の Push Notification（プッシュ通知）を送信する方法 4&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、C# で iOS の Push Notification（プッシュ通知）を送信する方法をご説明しました。</description><pubDate>Fri, 16 Jun 2023 21:35:00 GMT</pubDate><category>C# 便利メモ</category></item>
<item><title>C# で Gmail の SMTP サーバを使ってメールを送信する方法</title><link>https://csharp.sql55.com/cookbook/how-to-send-email-using-gmail-smtp-server.php</link><description>C# で Gmail の SMTP サーバを使ってメールを送信する方法&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する&lt;br&gt;ここでは、&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法をご説明します。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;Google でアプリパスワード (App Password) を生成する&lt;br&gt;MailKit をインストールする&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する&lt;br&gt;Google でアプリパスワード (App Password) を生成する&lt;br&gt;Gmail の SMTP サーバを使ってメールを送信する際に必要な、アプリパスワード (App Password) を生成します。&lt;br&gt;&lt;br&gt;アプリパスワードを生成するには、2 段階認証プロセスが有効でなければならないので、していない方は先に有効にしておいてください。&lt;br&gt;&lt;br&gt;&lt;br&gt;Google アカウントの [セキュリティ (Security)] を選択し、[Google へのログイン (Signing in to Google)] の箇所の [アプリ パスワード (App Passwords)] を選択します。&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;アプリ パスワード (App Passwords) の画面で、アプリとデバイスを選択します。&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法 2&lt;br&gt;&lt;br&gt;&lt;br&gt;今回はアプリには Mail、デバイスには Windows Computer を選択し、[生成 (GENERATE)] ボタンをクリックします。&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法 3&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法 4&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法 5&lt;br&gt;&lt;br&gt;&lt;br&gt;アプリパスワードが生成され表示されるので、これを使います。&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法 6&lt;br&gt;&lt;br&gt;&lt;br&gt;MailKit をインストールする&lt;br&gt;Visual Studio でコンソールアプリの新規プロジェクトを生成します。&lt;br&gt;&lt;br&gt;SmtpClient Class のドキュメントページで紹介されている MailKit を使うので、インストールします。&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法 10&lt;br&gt;&lt;br&gt;&lt;br&gt;ツール &gt; NuGet パッケージ マネージャー &gt; パッケージ マネージャーコンソールを選択します。&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法 7&lt;br&gt;&lt;br&gt;&lt;br&gt;コンソールで Install-Package MailKit と入力して実行すると、MailKit がインストールされます。&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法 8&lt;br&gt;&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信するには、次のようにできます。&lt;br&gt;&lt;br&gt;using MailKit.Net.Smtp;&lt;br&gt;using MimeKit;&lt;br&gt;using MailKit.Security;&lt;br&gt;&lt;br&gt;namespace MailTest&lt;br&gt;{&lt;br&gt;    class Program&lt;br&gt;    {&lt;br&gt;        static void Main(string[] args)&lt;br&gt;        {&lt;br&gt;            var smtpServer = &quot;smtp.gmail.com&quot;;&lt;br&gt;            var port = 587;&lt;br&gt;            var user = &quot;xxxxxxxxx@gmail.com&quot;;&lt;br&gt;            var password = &quot;xxxxxxxxxxxxxxxxx&quot;;&lt;br&gt;&lt;br&gt;            var fromAddress = &quot;xxxxxxxxx@gmail.com&quot;;&lt;br&gt;            var toAddress = &quot;toaddress@gmail.com&quot;;&lt;br&gt;            var subject = &quot;Gmail SMTP Test&quot;;&lt;br&gt;            var body = &quot;これは Gmail SMTP のテストメールです。&quot;;&lt;br&gt;            var isHtmlBody = false;&lt;br&gt;&lt;br&gt;            var message = new MimeMessage();&lt;br&gt;            message.From.Add(new MailboxAddress(fromAddress, fromAddress));&lt;br&gt;            message.To.Add(new MailboxAddress(toAddress, toAddress));&lt;br&gt;            message.Subject = subject;&lt;br&gt;&lt;br&gt;            var builder = new BodyBuilder();&lt;br&gt;            if (isHtmlBody)&lt;br&gt;            {&lt;br&gt;                builder.HtmlBody = body;&lt;br&gt;            }&lt;br&gt;            else&lt;br&gt;            {&lt;br&gt;                builder.TextBody = body;&lt;br&gt;            }&lt;br&gt;            message.Body = builder.ToMessageBody();&lt;br&gt;&lt;br&gt;            using (var client = new SmtpClient())&lt;br&gt;            {&lt;br&gt;                client.Connect(smtpServer, port, SecureSocketOptions.StartTls);&lt;br&gt;                client.Authenticate(user, password);&lt;br&gt;                client.Send(message);&lt;br&gt;                client.Disconnect(true);&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法 9&lt;br&gt;&lt;br&gt;Gmail の SMTP サーバは smtp.gmail.com、ポートは 587 です。&lt;br&gt;&lt;br&gt;user にはアプリパスワードを生成したアカウントの gmail のアドレスを、password には生成したアプリパスワードを指定します。&lt;br&gt;&lt;br&gt;&lt;br&gt;22 ~ 25 行目では、MimeMessageオブジェクトを生成して、メールの From、To、Subject を指定しています。&lt;br&gt;&lt;br&gt;27 ~ 36 行目では、メールの Body を生成しています。テキストでも HTML でもいいように BodyBuilder を使っています。&lt;br&gt;&lt;br&gt;&lt;br&gt;38 ~ 44 行目が、SmtpClientクライアントを使ってメールを送信している箇所です。&lt;br&gt;&lt;br&gt;Connect メソッドに上で定義した smtpServer と port を渡し、SecureSocketOptions には SecureSocketOptions.StartTls を指定しています。&lt;br&gt;&lt;br&gt;Authenticateメソッドに上で定義した user と password を渡して認証しています。&lt;br&gt;&lt;br&gt;Send メソッドでメールを送信して、Disconnect で切断しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;これを実行すると、以下のようなメールが送信されました。&lt;br&gt;&lt;br&gt;C# で Gmail の SMTP サーバを使ってメールを送信する方法 11&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、C# で Gmail の SMTP サーバを使ってメールを送信する方法をご説明しました。</description><pubDate>Tue, 07 Feb 2023 02:25:00 GMT</pubDate><category>C# 便利メモ</category></item>
<item><title>C# で複数のプロパティの値でリストをソートする方法</title><link>https://csharp.sql55.com/cookbook/csharp-how-to-sort-list-of-objects-by-multiple-properties.php</link><description>C# で複数のプロパティの値でリストをソートする方法&lt;br&gt;&lt;br&gt;C# で複数のプロパティの値でリストをソートする&lt;br&gt;クラスのオブジェクトのリスト (List) があって、オブジェクトの複数のプロパティの値でソートしたリストを取得したい時ありませんか？&lt;br&gt;&lt;br&gt;例えば、次のような Student クラスのリスト　List&lt;Student&gt; があって、ClassCode、LastName、FirstName でソートしたリストを取得したいような時です。&lt;br&gt;&lt;br&gt;class Student&lt;br&gt;{&lt;br&gt;    public int StudentID { get; set; }&lt;br&gt;    public string FirstName { get; set; }&lt;br&gt;    public string LastName { get; set; }&lt;br&gt;    public string Gender { get; set; }&lt;br&gt;    public string ClassCode { get; set; }&lt;br&gt;&lt;br&gt;    public Student(int studentID, string firstName, string lastName, string gender, string classCode)&lt;br&gt;    {&lt;br&gt;        StudentID = studentID;&lt;br&gt;        FirstName = firstName;&lt;br&gt;        LastName = lastName;&lt;br&gt;        Gender = gender;&lt;br&gt;        ClassCode = classCode;&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;br&gt;C# でリストを複数のプロパティの値で昇順にソートしたリストを取得したいい時には、Linq の OrderBy メソッドと ThenBy メソッドが使えます。&lt;br&gt;&lt;br&gt;ひとつめのプロパティには OrderBy を使い、それ以降のプロパティには ThenBy を使います。&lt;br&gt;&lt;br&gt;例えば、プロパティ1、プロパティ2、プロパティ3 の順番で昇順にソートしたい時は次のようにします。&lt;br&gt;&lt;br&gt;リスト.OrderBy(obj =&gt; obj.プロパティ1).ThenBy(obj =&gt; obj.プロパティ2).ThenBy(obj =&gt; obj.プロパティ3).ToList()&lt;br&gt;obj としている箇所は他の名前でも大丈夫です。&lt;br&gt;&lt;br&gt;Linq の OrderBy や ThenBy は IOrderedEnumerable を返すので、ToList メソッドで List に変換しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;降順にソートしたい時は代わりに Linq の OrderByDescending メソッドや ThenByDescending メソッドを使います。&lt;br&gt;&lt;br&gt;使い方は OrderBy や ThenBy と同じです。&lt;br&gt;&lt;br&gt;&lt;br&gt;C# で students リストを ClassCode、LastName、FirstName でソートしたリストを取得サンプルーコードは次の通りです。&lt;br&gt;&lt;br&gt;using System;&lt;br&gt;using System.Collections.Generic;&lt;br&gt;using System.Linq;&lt;br&gt;&lt;br&gt;namespace ListTest&lt;br&gt;{&lt;br&gt;    class Program&lt;br&gt;    {&lt;br&gt;        static void Main(string[] args)&lt;br&gt;        {&lt;br&gt;            var students = new List();&lt;br&gt;            students.Add(new Student(1, &quot;Kana&quot;, &quot;Yamada&quot;, &quot;F&quot;, &quot;ClassC&quot;));&lt;br&gt;            students.Add(new Student(2, &quot;Keita&quot;, &quot;Maeda&quot;, &quot;M&quot;, &quot;ClassC&quot;));&lt;br&gt;            students.Add(new Student(3, &quot;Kaede&quot;, &quot;Tanaka&quot;, &quot;F&quot;, &quot;ClassA&quot;));&lt;br&gt;            students.Add(new Student(4, &quot;Ryota&quot;, &quot;Suzuki&quot;, &quot;M&quot;, &quot;ClassB&quot;));&lt;br&gt;            students.Add(new Student(5, &quot;Yuri&quot;, &quot;Nakata&quot;, &quot;F&quot;, &quot;ClassB&quot;));&lt;br&gt;            students.Add(new Student(5, &quot;Misaki&quot;, &quot;Nakata&quot;, &quot;F&quot;, &quot;ClassB&quot;));&lt;br&gt;            students.Add(new Student(5, &quot;Mana&quot;, &quot;Yamamoto&quot;, &quot;F&quot;, &quot;ClassA&quot;));&lt;br&gt;&lt;br&gt;            foreach(var s in students)&lt;br&gt;            {&lt;br&gt;                Console.WriteLine(s.ClassCode + &quot;: &quot; + s.LastName + &quot;, &quot; + s.FirstName);&lt;br&gt;            }&lt;br&gt;&lt;br&gt;            Console.WriteLine(&quot;-------------------&quot;);&lt;br&gt;&lt;br&gt;            var students2 = students.OrderBy(s =&gt; s.ClassCode).ThenBy(s =&gt; s.LastName).ThenBy(s =&gt; s.FirstName).ToList();&lt;br&gt;&lt;br&gt;            foreach (var s in students2)&lt;br&gt;            {&lt;br&gt;                Console.WriteLine(s.ClassCode + &quot;: &quot; + s.LastName + &quot;, &quot; + s.FirstName);&lt;br&gt;            }&lt;br&gt;&lt;br&gt;            Console.WriteLine(&quot;-------------------&quot;);&lt;br&gt;&lt;br&gt;            var students3 = students.OrderByDescending(s =&gt; s.ClassCode).ThenBy(s =&gt; s.LastName).ThenByDescending(s =&gt; s.FirstName).ToList();&lt;br&gt;&lt;br&gt;            foreach (var s in students3)&lt;br&gt;            {&lt;br&gt;                Console.WriteLine(s.ClassCode + &quot;: &quot; + s.LastName + &quot;, &quot; + s.FirstName);&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    class Student&lt;br&gt;    {&lt;br&gt;        public int StudentID { get; set; }&lt;br&gt;        public string FirstName { get; set; }&lt;br&gt;        public string LastName { get; set; }&lt;br&gt;        public string Gender { get; set; }&lt;br&gt;        public string ClassCode { get; set; }&lt;br&gt;&lt;br&gt;        public Student(int studentID, string firstName, string lastName, string gender, string classCode)&lt;br&gt;        {&lt;br&gt;            StudentID = studentID;&lt;br&gt;            FirstName = firstName;&lt;br&gt;            LastName = lastName;&lt;br&gt;            Gender = gender;&lt;br&gt;            ClassCode = classCode;&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;br&gt;11 ~ 18 行目では Student クラスのオブジェクトを持つ List を生成しています。&lt;br&gt;&lt;br&gt;27 行目では、Linq の OrderBy と ThenBy メソッドを使って、students リストを ClassCode、LastName、FirstName の昇順にソートしたオブジェクトを持つ List&lt;Student&gt; を生成しています。&lt;br&gt;&lt;br&gt;36 行目では、Linq の OrderByDescending と ThenByDescending メソッドも使って、students リストを ClassCode 降順、LastName 昇順、FirstName 降順にソートしたオブジェクトを持つ List&lt;Student&gt; を生成しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;上のコードを実行すると次のようになります。&lt;br&gt;&lt;br&gt;ClassC: Yamada, Kana&lt;br&gt;ClassC: Maeda, Keita&lt;br&gt;ClassA: Tanaka, Kaede&lt;br&gt;ClassB: Suzuki, Ryota&lt;br&gt;ClassB: Nakata, Yuri&lt;br&gt;ClassB: Nakata, Misaki&lt;br&gt;ClassA: Yamamoto, Mana&lt;br&gt;-------------------&lt;br&gt;ClassA: Tanaka, Kaede&lt;br&gt;ClassA: Yamamoto, Mana&lt;br&gt;ClassB: Nakata, Misaki&lt;br&gt;ClassB: Nakata, Yuri&lt;br&gt;ClassB: Suzuki, Ryota&lt;br&gt;ClassC: Maeda, Keita&lt;br&gt;ClassC: Yamada, Kana&lt;br&gt;-------------------&lt;br&gt;ClassC: Maeda, Keita&lt;br&gt;ClassC: Yamada, Kana&lt;br&gt;ClassB: Nakata, Yuri&lt;br&gt;ClassB: Nakata, Misaki&lt;br&gt;ClassB: Suzuki, Ryota&lt;br&gt;ClassA: Tanaka, Kaede&lt;br&gt;ClassA: Yamamoto, Mana&lt;br&gt;Press any key to continue . . .&lt;br&gt;C# で複数のプロパティの値でリストをソートする方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;新しくできた List の中の Student オブジェクトは、元のリストと同じ Student オブジェクトをポイントしているので、クラス変数の値を変更すると、全てのリストに入っている同じ Student オブジェクトの値が変更されます。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、C# で複数のプロパティの値でリストをソートする方法をご紹介しました。</description><pubDate>Tue, 24 Jan 2023 23:15:00 GMT</pubDate><category>C# 便利メモ</category></item>
<item><title>C# のリストから指定したプロパティの値を持つオブジェクトを取得する方法</title><link>https://csharp.sql55.com/cookbook/csharp-how-to-get-an-object-by-property-value-from-list.php</link><description>C# のリストから指定したプロパティの値を持つオブジェクトを取得する方法&lt;br&gt;&lt;br&gt; &lt;br&gt;C# のクラスオブジェクトのリスト (List) があって、ID などの値を指定して、その ID を持つオブジェクトを取得したいような時ありますよね。&lt;br&gt;&lt;br&gt;例えば、次のような Student クラスのリスト List&lt;Student&gt; があって、そのうち、StudentID = 2 の Student オブジェクトを取得したいような時です。&lt;br&gt;&lt;br&gt;class Student&lt;br&gt;{&lt;br&gt;    public int StudentID { get; set; }&lt;br&gt;    public string FirstName { get; set; }&lt;br&gt;    public string LastName { get; set; }&lt;br&gt;&lt;br&gt;    public Student(int studentID, string firstName, string lastName)&lt;br&gt;    {&lt;br&gt;        StudentID = studentID;&lt;br&gt;        FirstName = firstName;&lt;br&gt;        LastName = lastName;&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;リスト内に条件に合致するオブジェクトが複数存在して、結果をリストとして取得したいような時はこちらをごらんください。&lt;br&gt;&lt;br&gt;今回は、リスト内に条件に合致するオブジェクトかひとつだけ存在すると想定されるようなケースで、それを Student オブジェクトとして取得する方法をご紹介します。&lt;br&gt;&lt;br&gt;&lt;br&gt;C# のリストから指定したプロパティの値を持つオブジェクトを取得する方法&lt;br&gt;C# でリストを ID などの値を指定してフィルターして、その ID を持つオブジェクトを取得したい時には、Linq の FirstOrDefault メソッドや、List の Find メソッドが使えます。&lt;br&gt;&lt;br&gt;使い方は リスト.FirstOrDefault(obj =&gt; [obj を使った条件式]) や リスト.Find(obj =&gt; [obj を使った条件式]) のように使います。&lt;br&gt;&lt;br&gt;どちらも obj としている箇所は他の名前でも大丈夫で、データ型はリストに入っているオブジェクトのデータ型になります。&lt;br&gt;&lt;br&gt;&lt;br&gt;戻り値はどちらのメソッドとも、オブジェクトが見つかった時はそのオブジェクトが、見つからなかったときは、そのオブジェクトのデフォルト値がかえります。&lt;br&gt;&lt;br&gt;クラスのデフォルト値は null なので、クラスオブジェクトのリストの時は見つからなかった時に null がかえります。&lt;br&gt;&lt;br&gt;また、複数のオブジェクトが条件に合致した時は、両方のメソッドと共に、最初にみつけたオブジェクトを返します。&lt;br&gt;&lt;br&gt;&lt;br&gt;C# のクラスオブジェクトのリストに対して、指定した ID を持つオブジェクトを取得するサンプルーコードは次の通りです。&lt;br&gt;&lt;br&gt;using System;&lt;br&gt;using System.Collections.Generic;&lt;br&gt;using System.Linq;&lt;br&gt;&lt;br&gt;namespace ConsoleApp1&lt;br&gt;{&lt;br&gt;    class Program&lt;br&gt;    {&lt;br&gt;        static void Main(string[] args)&lt;br&gt;        {&lt;br&gt;            var students = new List&lt;Student&gt;();&lt;br&gt;            students.Add(new Student(1, &quot;Kana&quot;, &quot;Yamada&quot;));&lt;br&gt;            students.Add(new Student(2, &quot;Keita&quot;, &quot;Maeda&quot;));&lt;br&gt;            students.Add(new Student(3, &quot;Kaede&quot;, &quot;Tanaka&quot;));&lt;br&gt;            students.Add(new Student(4, &quot;Ryota&quot;, &quot;Suzuki&quot;));&lt;br&gt;            students.Add(new Student(5, &quot;Saki&quot;, &quot;Taguchi&quot;));&lt;br&gt;&lt;br&gt;            var s1 = students.FirstOrDefault(s =&gt; s.StudentID == 2);&lt;br&gt;            if (s1 != null)&lt;br&gt;            {&lt;br&gt;                Console.WriteLine(s1.FirstName);&lt;br&gt;            }&lt;br&gt;&lt;br&gt;            Console.WriteLine(&quot;-------------------&quot;);&lt;br&gt;&lt;br&gt;            var s2 = students.Find(s =&gt; s.StudentID == 2);&lt;br&gt;            if (s2 != null)&lt;br&gt;            {&lt;br&gt;                Console.WriteLine(s2.FirstName);&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    class Student&lt;br&gt;    {&lt;br&gt;        public int StudentID { get; set; }&lt;br&gt;        public string FirstName { get; set; }&lt;br&gt;        public string LastName { get; set; }&lt;br&gt;&lt;br&gt;        public Student(int studentID, string firstName, string lastName)&lt;br&gt;        {&lt;br&gt;            StudentID = studentID;&lt;br&gt;            FirstName = firstName;&lt;br&gt;            LastName = lastName;&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;br&gt;11 ~ 16 行目は Student クラスのオブジェクトを持つ List を生成しているだけです。&lt;br&gt;&lt;br&gt;18 行目では、Linq の FirstOrDefault メソッドを使って、students リストの中から、StudentID が 2 の Student オブジェクトを取得しています。&lt;br&gt;&lt;br&gt;26 行目では、List の Find メソッドを使って、students リストの中から、StudentID が 2 の Student オブジェクトを取得しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;上のコードを実行すると次のようになります。&lt;br&gt;&lt;br&gt;Keita&lt;br&gt;-------------------&lt;br&gt;Keita&lt;br&gt;C# のリストから指定したプロパティの値を持つオブジェクトを取得する方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;取得した Student オブジェクトは、リスト内にあったのと同じ Student オブジェクトをポイントしているので、取得したオブジェクトのクラス変数を変更すると、リスト内の Student オブジェクトも変更されます。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、C# のリストから指定したプロパティの値を持つオブジェクトを取得する方法をご説明しました。</description><pubDate>Mon, 01 Nov 2021 22:32:00 GMT</pubDate><category>C# 便利メモ</category></item>
<item><title>C# でリストをフィルターして、条件に合致した要素のみを持つリストを生成する方法</title><link>https://csharp.sql55.com/cookbook/csharp-how-to-filter-list-with-condition.php</link><description>C# でリストをフィルターして、条件に合致した要素のみを持つリストを生成する方法&lt;br&gt;&lt;br&gt; &lt;br&gt;C# でリストをフィルターして、条件に合致した要素のみを持つリストを生成する&lt;br&gt;クラスのオブジェクトが複数入っているリスト (List) があって、条件を指定して、それに合った要素のみを持つ新しいリストを生成したい時ありませんか？&lt;br&gt;&lt;br&gt;例えば、次のような Student クラスのリスト　List&lt;Student&gt; があって、そのうち、Birthday が null の Student オブジェクトのみを含むリストを取得したいような時です。&lt;br&gt;&lt;br&gt;class Student&lt;br&gt;{&lt;br&gt;    public string FirstName { get; set; }&lt;br&gt;    public string LastName { get; set; }&lt;br&gt;    public DateTime? Birthday { get; set; }&lt;br&gt;    public bool TestPassed { get; set; }&lt;br&gt;&lt;br&gt;    public Student(string firstName, string lastName, DateTime? birthday, bool testPassed)&lt;br&gt;    {&lt;br&gt;        FirstName = firstName;&lt;br&gt;        LastName = lastName;&lt;br&gt;        Birthday = birthday;&lt;br&gt;        TestPassed = testPassed;&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;br&gt;C# でリストをフィルターして、条件に合致した要素のみを持つリストを生成したい時には、List の FindAll メソッドや、Linq の Where メソッドが使えます。&lt;br&gt;&lt;br&gt;使い方は リスト.FindAll(obj =&gt; [obj を使った条件式]) や リスト.Where(obj =&gt; [obj を使った条件式]).ToList()のような感じで指定できます。&lt;br&gt;&lt;br&gt;どちらも obj としている箇所は他の名前でも大丈夫で、データ型はリストに入っているオブジェクトのデータ型になります。&lt;br&gt;&lt;br&gt;Linq の Where のほうは IEnumerable を返すので、ToList メソッドで List に変換しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;C# でリストをフィルターして、条件に合致した要素のみを持つリストを生成するサンプルーコードは次の通りです。&lt;br&gt;&lt;br&gt;using System;&lt;br&gt;using System.Collections.Generic;&lt;br&gt;using System.Linq;&lt;br&gt;&lt;br&gt;namespace ConsoleApp1&lt;br&gt;{&lt;br&gt;    class Program&lt;br&gt;    {&lt;br&gt;        static void Main(string[] args)&lt;br&gt;        {&lt;br&gt;            var students = new List&lt;Student&gt;();&lt;br&gt;            students.Add(new Student(&quot;Kana&quot;, &quot;Yamada&quot;, null, true));&lt;br&gt;            students.Add(new Student(&quot;Keita&quot;, &quot;Maeda&quot;, Convert.ToDateTime(&quot;2010/05/15&quot;), true));&lt;br&gt;            students.Add(new Student(&quot;Kaede&quot;, &quot;Tanaka&quot;, Convert.ToDateTime(&quot;2009/02/01&quot;), false));&lt;br&gt;            students.Add(new Student(&quot;Ryota&quot;, &quot;Suzuki&quot;, Convert.ToDateTime(&quot;2010/11/24&quot;), true));&lt;br&gt;            students.Add(new Student(&quot;Saki&quot;, &quot;Taguchi&quot;, null, false));&lt;br&gt;&lt;br&gt;            var students1 = students.FindAll(s =&gt; s.Birthday == null);&lt;br&gt;            foreach (var s in students1)&lt;br&gt;            {&lt;br&gt;                Console.WriteLine(s.FirstName);&lt;br&gt;            }&lt;br&gt;&lt;br&gt;            Console.WriteLine(&quot;-------------------&quot;);&lt;br&gt;&lt;br&gt;            var students2 = students.Where(s =&gt; s.Birthday == null).ToList();&lt;br&gt;            foreach (var s in students2)&lt;br&gt;            {&lt;br&gt;                Console.WriteLine(s.FirstName);&lt;br&gt;            }&lt;br&gt;&lt;br&gt;            Console.WriteLine(&quot;-------------------&quot;);&lt;br&gt;&lt;br&gt;            var students3 = students.Where(s =&gt; s.Birthday == null &amp;&amp; s.TestPassed ).ToList();&lt;br&gt;            foreach(var s in students3)&lt;br&gt;            {&lt;br&gt;                Console.WriteLine(s.FirstName);&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    class Student&lt;br&gt;    {&lt;br&gt;        public string FirstName { get; set; }&lt;br&gt;        public string LastName { get; set; }&lt;br&gt;        public DateTime? Birthday { get; set; }&lt;br&gt;        public bool TestPassed { get; set; }&lt;br&gt;&lt;br&gt;        public Student(string firstName, string lastName, DateTime? birthday, bool testPassed)&lt;br&gt;        {&lt;br&gt;            FirstName = firstName;&lt;br&gt;            LastName = lastName;&lt;br&gt;            Birthday = birthday;&lt;br&gt;            TestPassed = testPassed;&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;br&gt;11 ~ 16 行目は Student クラスのオブジェクトを持つ List を生成しているだけです。&lt;br&gt;&lt;br&gt;18 行目では、List の FindAll メソッドを使って、students リストの中から、Birthday が null の Student オブジェクトのみを持つ、List&lt;Student&gt; を生成しています。&lt;br&gt;&lt;br&gt;26 行目では、Linq の Where メソッドを使って、students リストの中から、Birthday が null の Student オブジェクトのみを持つ、List&lt;Student&gt; を生成しています。&lt;br&gt;&lt;br&gt;複数の条件を指定したい時は if 文などと同様に &amp;&amp; や || などで複数の条件を指定することができます。 34 行目では、Birthday が null で　TestPassed が true の Student オブジェクトのみを持つ、List&lt;Student&gt; を生成しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;上のコードを実行すると次のようになります。&lt;br&gt;&lt;br&gt;Kana&lt;br&gt;Saki&lt;br&gt;-------------------&lt;br&gt;Kana&lt;br&gt;Saki&lt;br&gt;-------------------&lt;br&gt;Kana&lt;br&gt;C# でリストをフィルターして、条件に合致した要素のみを持つリストを生成する方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;新しくできた List の中の Student オブジェクトは、元のリストと同じ Student オブジェクトをポイントしているので、クラス変数の値を変更すると、全てのリストに入っている同じ Student オブジェクトの値が変更されます。&lt;br&gt;&lt;br&gt;また、フィルターの結果、条件に合致する Student オブジェクトが存在しなくても、空のリストができるだけでエラーにはなりません。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、C# でリストをフィルターして、条件に合致した要素のみを持つリストを生成する方法をご紹介しました。</description><pubDate>Wed, 20 Jan 2021 19:48:00 GMT</pubDate><category>C# 便利メモ</category></item>
<item><title>C# で条件を指定して、リストや配列内のオブジェクトの数（要素数）をカウントする方法</title><link>https://csharp.sql55.com/cookbook/csharp-how-to-count-number-of-objects-in-list-satisfying-a-condition.php</link><description>C# で条件を指定して、リストや配列内のオブジェクトの数（要素数）をカウントする方法&lt;br&gt;&lt;br&gt; &lt;br&gt;条件を指定して、リストや配列内のオブジェクトの数（要素数）をカウントする&lt;br&gt;クラスのオブジェクトが複数入っているリスト (List) があって、クラスの変数が特定の値を持つオブジェクト数を数えたいような時ありませんか？&lt;br&gt;&lt;br&gt;例えば、次のような Student クラスのリスト List&lt;Student&gt; があって、Birthday が null の要素数や、TestPassed が true の要素数を数えたいような時です。&lt;br&gt;&lt;br&gt;class Student&lt;br&gt;{&lt;br&gt;    public string FirstName { get; set; }&lt;br&gt;    public string LastName { get; set; }&lt;br&gt;    public DateTime? Birthday { get; set; }&lt;br&gt;    public bool TestPassed { get; set; }&lt;br&gt;&lt;br&gt;    public Student(string firstName, string lastName, DateTime? birthday, bool testPassed)&lt;br&gt;    {&lt;br&gt;        FirstName = firstName;&lt;br&gt;        LastName = lastName;&lt;br&gt;        Birthday = birthday;&lt;br&gt;        TestPassed = testPassed;&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;br&gt;C# で条件を指定して、リストや配列内のオブジェクトの数（要素数）をカウントしたい時には、System.Linq の Count メソッドが使えます。&lt;br&gt;&lt;br&gt;使い方は リスト.Count(obj =&gt; [obj を使った条件式]) のような感じで指定できます。&lt;br&gt;&lt;br&gt;obj としている箇所は他の名前でも大丈夫で、obj のデータ型はリストに入っているオブジェクトのデータ型になります。&lt;br&gt;&lt;br&gt;&lt;br&gt;Linq の Count メソッドを使って、条件を指定して要素数を数えるサンプルーコードは次の通りです。&lt;br&gt;&lt;br&gt;using System;&lt;br&gt;using System.Collections.Generic;&lt;br&gt;using System.Linq;&lt;br&gt;&lt;br&gt;namespace ConsoleApp1&lt;br&gt;{&lt;br&gt;    class Program&lt;br&gt;    {&lt;br&gt;        static void Main(string[] args)&lt;br&gt;        {&lt;br&gt;            var students = new List&lt;Student&amp;&gt;();&lt;br&gt;            students.Add(new Student(&quot;Kana&quot;, &quot;Yamada&quot;, null, true));&lt;br&gt;            students.Add(new Student(&quot;Keita&quot;, &quot;Maeda&quot;, Convert.ToDateTime(&quot;2010/05/15&quot;), true));&lt;br&gt;            students.Add(new Student(&quot;Kaede&quot;, &quot;Tanaka&quot;, Convert.ToDateTime(&quot;2009/02/01&quot;), true));&lt;br&gt;            students.Add(new Student(&quot;Ryota&quot;, &quot;Suzuki&quot;, Convert.ToDateTime(&quot;2010/11/24&quot;), true));&lt;br&gt;            students.Add(new Student(&quot;Saki&quot;, &quot;Taguchi&quot;, null, false));&lt;br&gt;&lt;br&gt;            Console.WriteLine(students.Count(s =&gt; s.Birthday == null));&lt;br&gt;            Console.WriteLine(students.Count(s =&gt; s.TestPassed == true));&lt;br&gt;            Console.WriteLine(students.Count(s =&gt; s.FirstName.StartsWith(&quot;K&quot;)));&lt;br&gt;            Console.WriteLine(students.Count(s =&gt; s.LastName == &quot;ABC&quot;));&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    class Student&lt;br&gt;    {&lt;br&gt;        public string FirstName { get; set; }&lt;br&gt;        public string LastName { get; set; }&lt;br&gt;        public DateTime? Birthday { get; set; }&lt;br&gt;        public bool TestPassed { get; set; }&lt;br&gt;&lt;br&gt;        public Student(string firstName, string lastName, DateTime? birthday, bool testPassed)&lt;br&gt;        {&lt;br&gt;            FirstName = firstName;&lt;br&gt;            LastName = lastName;&lt;br&gt;            Birthday = birthday;&lt;br&gt;            TestPassed = testPassed;&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;br&gt;11 ~ 16 行目は Student クラスのオブジェクトを持つ List を生成しています。&lt;br&gt;&lt;br&gt;18 行目は、students リストの中で、Birthday が null の要素数をカウントしています。&lt;br&gt;&lt;br&gt;19 行目は、students リストの中で、TestPassed が true の要素数をカウントしています。&lt;br&gt;&lt;br&gt;20 行目は、students リストの中で、FirstName が K で始まる要素数をカウントしています。&lt;br&gt;&lt;br&gt;21 行目は、students リストの中で、LastName が ABC の要素数をカウントしています。 条件を満たす要素がない場合も 0 が返るだけでエラーにはなりません。&lt;br&gt;&lt;br&gt;&lt;br&gt;実行すると次のようになります。&lt;br&gt;&lt;br&gt;2&lt;br&gt;4&lt;br&gt;3&lt;br&gt;0&lt;br&gt;C# で条件を指定して、リストや配列内のオブジェクトの数（要素数）をカウントする方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、C# で条件を指定して、リストや配列内のオブジェクトの数（要素数）をカウントする方法をご紹介しました。</description><pubDate>Wed, 20 Jan 2021 01:24:00 GMT</pubDate><category>C# 便利メモ</category></item>
<item><title>C# で OleDbDataReader を使って MS Access から値を取得する</title><link>https://csharp.sql55.com/database/how-to-get-data-from-ms-access-using-oledbdatareader.php</link><description>C# で OleDbDataReader を使って MS Access から値を取得する&lt;br&gt;&lt;br&gt; &lt;br&gt;MS Access のテーブルから値を取得する&lt;br&gt;今回は C# で MS Access ファイル (.accdb) のテーブルから、OleDbDataReader を使って値を取得してみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;次のような二つの Test1.accdb と Test2.accdb という名前の MS Access ファイルがあります。&lt;br&gt;&lt;br&gt;どちらも Students という名前のテーブルに以下のようなデータがはいっています。&lt;br&gt;&lt;br&gt;Test1.accdb&lt;br&gt;C# で MS Access から値を取得する 1&lt;br&gt;&lt;br&gt;Test2.accdb&lt;br&gt;C# で MS Access から値を取得する 2&lt;br&gt;&lt;br&gt;Test2.accdb のほうはパスワードで制限がかけられています。&lt;br&gt;&lt;br&gt;C# で MS Access から値を取得する 3&lt;br&gt;&lt;br&gt;これらの MS Access ファイルの Students テーブルから値を取得してみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;MS Access への接続文字列&lt;br&gt;まず、MS Access への接続文字列は次のようになります。&lt;br&gt;&lt;br&gt;Data Source=[MS Access ファイルへのパス]&lt;br&gt;Jet OLEDB:Database Password=[データベースのパスワード]&lt;br&gt;&lt;br&gt;パスワードでデータベースへのアクセスが制限されていない場合&lt;br&gt;&lt;br&gt;connectionString=&quot;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Test\\C#\\MSAccess\\Test1.accdb&quot;&lt;br&gt;パスワードでデータベースへのアクセスが制限されている場合&lt;br&gt;&lt;br&gt;connectionString=&quot;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Test\\C#\\MSAccess\\Test2.accdb;Jet OLEDB:Database Password=MyPassword&quot;&lt;br&gt;これを 「 データベースの接続文字列を App.config から取得する 」 の方法で App.config に置いて、接続文字列を使う準備をしておきます。&lt;br&gt;&lt;br&gt;&lt;connectionStrings&gt;&lt;br&gt;    &lt;add name=&quot;DB1&quot; &lt;br&gt;         connectionString=&quot;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Test\\C#\\MSAccess\\Test1.accdb&quot; /&gt;&lt;br&gt;    &lt;add name=&quot;DB2&quot; &lt;br&gt;         connectionString=&quot;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\Test\\C#\\MSAccess\\Test2.accdb;Jet OLEDB:Database Password=MyPassword&quot; /&gt;&lt;br&gt;  &lt;/connectionStrings&gt;&lt;br&gt;&lt;/pre&gt;&lt;br&gt;C# で MS Access から値を取得する 4&lt;br&gt;&lt;br&gt;&lt;br&gt;OleDbDataReader を使って MS Access から値を取得する&lt;br&gt;OleDbDataReader を使ってデータベースから取得したデータを読んで、コンソールに書き出してみましょう。&lt;br&gt;&lt;br&gt;MS Access データベースの Students テーブルから、StudentID, FirstName, LastName を取得するコードは以下の通りです。&lt;br&gt;&lt;br&gt;string connString = ConfigurationManager.ConnectionStrings[&quot;DB2&quot;].ConnectionString;&lt;br&gt;string queryString = &quot;SELECT StudentID, FirstName, LastName FROM Students;&quot;;&lt;br&gt;&lt;br&gt;using (OleDbConnection conn = new OleDbConnection(connString))&lt;br&gt;{&lt;br&gt;	var comm = new OleDbCommand(queryString, conn);&lt;br&gt;	conn.Open();&lt;br&gt;	&lt;br&gt;	using (OleDbDataReader dr = comm.ExecuteReader())&lt;br&gt;	{&lt;br&gt;	    while (dr.Read())&lt;br&gt;	    {&lt;br&gt;	        Console.WriteLine(string.Format(&quot;{0}: {1} {2}&quot;,&lt;br&gt;	                                        dr[&quot;StudentID&quot;],&lt;br&gt;	                                        dr[&quot;FirstName&quot;],&lt;br&gt;	                                        dr[&quot;LastName&quot;]));&lt;br&gt;	    }&lt;br&gt;	}&lt;br&gt;}&lt;br&gt;C# で MS Access から値を取得する 5&lt;br&gt;&lt;br&gt;&lt;br&gt;OleDbDataReader を使うには System.Data.OleDb、config ファイルから値を取得するのに System.Configuration が必要ですので、using ディレクティブで追加しておきます。&lt;br&gt;&lt;br&gt;&lt;br&gt;このコードで行っている処理の流れは次の通りです。&lt;br&gt;&lt;br&gt;接続文字列をコンストラクターに渡して OleDbConnection を生成する。&lt;br&gt;アドホック・クエリとコネクションをコンストラクターに渡して OleDbCommand を生成する。&lt;br&gt;コネクションを open する。&lt;br&gt;OleDbCommand の ExecuteReader メソッドを呼んで、OleDbDataReader を生成する。&lt;br&gt;OleDbDataReader の Read メソッド を While ループで実行することで、1 行ずつ読み込む。&lt;br&gt;読んだ行をコンソールにフォーマットして書き出す。&lt;br&gt;&lt;br&gt;OleDbConnection や OleDbDataReader は using ステートメントを使っておかないと、Exception でコードパスが飛んだ時に、Close し忘れる可能性がでてきてしまいますので、using を使います。&lt;br&gt;&lt;br&gt;OleDbDataReader の Read メソッドはまだ行がある時は true、もうない時は　false を返してくれるので、While(dr.Read()) としておけば 全行読み終わった時点で while ループを抜けてくれます。&lt;br&gt;&lt;br&gt;SqlDataReader の時とほとんど一緒ですね！&lt;br&gt;&lt;br&gt;&lt;br&gt;こちらが上のコードの ConnectionStrings を DB1、DB2、と変更して実行した結果です。&lt;br&gt;&lt;br&gt;Test1.accdb&lt;br&gt;C# で MS Access から値を取得する 6&lt;br&gt;&lt;br&gt;Test2.accdb&lt;br&gt;C# で MS Access から値を取得する 7</description><pubDate>Tue, 07 Jan 2020 21:33:00 GMT</pubDate><category>C# とデータベース</category></item>
<item><title>C# で数値をフォーマットされた文字列に変換する</title><link>https://csharp.sql55.com/cookbook/format-number.php</link><description>C# で数値をフォーマットされた文字列に変換する&lt;br&gt;&lt;br&gt; &lt;br&gt;数値をフォーマットされた文字列に変換する&lt;br&gt;int、double、decimal などの数値型の値を、小数点以下なし、小数第二位まで等、フォーマットされた文字列に変換したい時ありますよね。&lt;br&gt;&lt;br&gt;ここでは、数値を文字列に変換する際に良く使うフォーマットの例を書いておこうと思います。&lt;br&gt;&lt;br&gt;今回はサンプルとして Decimal 型の値を文字列に変換する例を載せておきます。&lt;br&gt;&lt;br&gt;目次&lt;br&gt;1. スタンダードフォーマット文字列とは？&lt;br&gt;2. カスタムフォーマット文字列とは？&lt;br&gt;3. フォーマット文字列を使って数値を文字列に変換する&lt;br&gt;4. 数値を切り上げ・切り捨てして文字列に変換する&lt;br&gt;&lt;br&gt; &lt;br&gt;スタンダードフォーマット文字列とは？&lt;br&gt;スタンダードフォーマット文字列はアルファベット 1 文字で定義されている、標準の書式指定文字列です。&lt;br&gt;&lt;br&gt;スタンダードフォーマット文字列の代表的なものには、次の 3 つがあります。&lt;br&gt;&lt;br&gt;F: 固定小数点&lt;br&gt;N: 桁区切り記号つき&lt;br&gt;C: 通貨&lt;br&gt;使う時は [スタンダードフォーマット文字列] のみ、または、[スタンダードフォーマット文字列][精度指定子] のように指定します。&lt;br&gt;&lt;br&gt;精度指定子は小数点以下の桁数で 0 ~ 99 までの数字が指定でき、F、N、C は指定しなかった場合デフォルトは 2 になります。&lt;br&gt;&lt;br&gt;例えば、固定小数点の小数点以下なしにしたい場合は F0 で、小数点第二位までにしたい場合は F2 のように指定します。&lt;br&gt;&lt;br&gt;元の数値の小数点以下の数字が指定した精度より多い場合、値は四捨五入されます。&lt;br&gt;&lt;br&gt;カルチャーによって、同じスタンダードフォーマット文字列を指定しても変換後の文字列が変わってくる場合があります。&lt;br&gt;&lt;br&gt;&lt;br&gt;カスタムフォーマット文字列とは？&lt;br&gt;カスタムフォーマット文字列では、カスタム数値書式指定子というものを使って、数値のフォーマットを指定することができます。&lt;br&gt;&lt;br&gt;カスタム数値書式指定子の代表的なものには、次のようなものがあります。&lt;br&gt;&lt;br&gt;0: その桁に数字があればその数字が、なければ 0 が表示される&lt;br&gt;#: その桁に数字があればその数字が、なければ表示されない&lt;br&gt;,: 桁区切り記号を入れる&lt;br&gt;&#039;文字列&#039;: 文字列がそのまま結果に表示される&lt;br&gt;こちらも元の数値の小数点以下の数字が指定した桁数より多い場合、値は四捨五入されます。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;フォーマット文字列を使って数値を文字列に変換する&lt;br&gt;C# の数値のデータ型には ToString() の他に ToString(String)、 ToString(IFormatProvider)、 ToString(String, IFormatProvider) というオーバーロードメソッドが用意されていて、数値を文字列に変換する際にフォーマットを指定して変換することができます。&lt;br&gt;&lt;br&gt;String の引数にはスタンダードとカスタムのフォーマット文字列を指定することができます。&lt;br&gt;&lt;br&gt;プログラムを実行する際の CurrentCulture がわからない場合や、特定のカルチャーの結果を得たい場合は、IFormatProvider の引数に CultureInfo を渡すことでカルチャーを指定することができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;以下は Decimal.ToString([フォーマット文字列]) を使って、数値をフォーマットされた文字列に変換するサンプルコードです。&lt;br&gt;&lt;br&gt;実行される場合は、using に以下の二つを追加してください。&lt;br&gt;&lt;br&gt;using System.Diagnostics;&lt;br&gt;using System.Globalization;&lt;br&gt;decimal d = 156256.799m;&lt;br&gt;&lt;br&gt;Debug.WriteLine(d.ToString(&quot;----- スタンダードフォーマット文字列 -----&quot;));&lt;br&gt;Debug.WriteLine(d.ToString(&quot;-- F --&quot;));&lt;br&gt;Debug.WriteLine(d.ToString(&quot;F&quot;));  // 156256.80 (default:2)&lt;br&gt;Debug.WriteLine(d.ToString(&quot;F0&quot;)); // 156257&lt;br&gt;Debug.WriteLine(d.ToString(&quot;F1&quot;)); // 156256.8&lt;br&gt;Debug.WriteLine(d.ToString(&quot;F2&quot;)); // 156256.80&lt;br&gt;&lt;br&gt;Debug.WriteLine(d.ToString(&quot;-- N --&quot;));&lt;br&gt;Debug.WriteLine(d.ToString(&quot;N&quot;));  // 156,256.80 (default:2)&lt;br&gt;Debug.WriteLine(d.ToString(&quot;N0&quot;)); // 156,257&lt;br&gt;Debug.WriteLine(d.ToString(&quot;N1&quot;)); // 156,256.8 &lt;br&gt;Debug.WriteLine(d.ToString(&quot;N2&quot;)); // 156,256.80&lt;br&gt;&lt;br&gt;Debug.WriteLine(d.ToString(&quot;-- C --&quot;));&lt;br&gt;CultureInfo cultureJP = CultureInfo.CreateSpecificCulture(&quot;ja-JP&quot;);&lt;br&gt;Debug.WriteLine(d.ToString(&quot;C&quot;, cultureJP)); // Y156,257&lt;br&gt;&lt;br&gt;CultureInfo cultureUS = CultureInfo.CreateSpecificCulture(&quot;en-US&quot;);&lt;br&gt;Debug.WriteLine(d.ToString(&quot;C&quot;, cultureUS)); // $156,256.80&lt;br&gt;&lt;br&gt;Debug.WriteLine(d.ToString(&quot;----- カスタムフォーマット文字列 -----&quot;));&lt;br&gt;Debug.WriteLine(d.ToString(&quot;0&quot;));       // 156257&lt;br&gt;Debug.WriteLine(d.ToString(&quot;0.00&quot;));    // 156256.80&lt;br&gt;Debug.WriteLine(d.ToString(&quot;#.##&quot;));    // 156256.8&lt;br&gt;Debug.WriteLine(d.ToString(&quot;#,0.00&quot;));  // 156,256.80&lt;br&gt;Debug.WriteLine(d.ToString(&quot;0,0&#039;円&#039;&quot;)); // 156,257円&lt;br&gt;C# で数値をフォーマットされた文字列に変換する 1&lt;br&gt;&lt;br&gt;C# で数値をフォーマットされた文字列に変換する 2&lt;br&gt;&lt;br&gt;&lt;br&gt;また、String.Format メソッドでもフォーマット文字列を使うことができます。&lt;br&gt;&lt;br&gt;decimal d = 156256.799m;&lt;br&gt;&lt;br&gt;Debug.WriteLine(string.Format(&quot;{0:F0}&quot;, d));    // 156257&lt;br&gt;Debug.WriteLine(string.Format(&quot;{0:F2}&quot;, d));    // 156256.80&lt;br&gt;&lt;br&gt;Debug.WriteLine(string.Format(&quot;{0:0}&quot;, d));     // 156257&lt;br&gt;Debug.WriteLine(string.Format(&quot;{0:#.##}&quot;, d));  // 156256.8&lt;br&gt;C# で数値をフォーマットされた文字列に変換する 3&lt;br&gt;&lt;br&gt;&lt;br&gt;数値を切り上げ・切り捨てして文字列に変換する&lt;br&gt;フォーマット文字列を使った方法は、指定した桁に四捨五入されて文字列に変換されます。&lt;br&gt;&lt;br&gt;切り上げ・切り捨てしたい場合は、文字列に変換する前に、先に数値を切り上げ・切り捨てする必要があります。&lt;br&gt;&lt;br&gt;&lt;br&gt;小数点以下切り上げ、小数点以下切り捨て、小数点第二位で切り上げ、小数点第二位で切り捨てするサンプルコードを載せておきます。&lt;br&gt;&lt;br&gt;decimal d = 156256.799m;&lt;br&gt;&lt;br&gt;decimal d1RoundUp = Math.Ceiling(d);&lt;br&gt;Debug.WriteLine(d1RoundUp.ToString(&quot;F0&quot;));   // 156257&lt;br&gt;&lt;br&gt;decimal d1RoundDown = Math.Floor(d);&lt;br&gt;Debug.WriteLine(d1RoundDown.ToString(&quot;F0&quot;)); // 156256&lt;br&gt;&lt;br&gt;decimal d2RoundUp = Math.Ceiling(d * 100) / 100;&lt;br&gt;Debug.WriteLine(d2RoundUp.ToString(&quot;F2&quot;));   // 156256.80&lt;br&gt;&lt;br&gt;decimal d2RoundDown = Math.Floor(d * 100) / 100;&lt;br&gt;Debug.WriteLine(d2RoundDown.ToString(&quot;F2&quot;)); // 156256.79&lt;br&gt;C# で数値をフォーマットされた文字列に変換する 4&lt;br&gt;&lt;br&gt;切り上げの時は Math.Ceiling、切り捨ての時は Math.Floor を使います。&lt;br&gt;&lt;br&gt;小数点以下切り上げ・切り捨てしたい時は Math.Ceiling・Math.Floor を使い、数値を切り上げ・切り捨てしてから変換すれば OK です。&lt;br&gt;&lt;br&gt;それ以外の時は、数値を切り上げ・切り下げの後で残したい桁が整数部の一の位になるようにしてから、Math.Ceiling・Math.Floor を使い、その後最初かけた値と同じ値で割ることによって元に戻しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;以上、C# で数値をフォーマットされた文字列に変換する方法でした。</description><pubDate>Sat, 28 Dec 2019 19:14:00 GMT</pubDate><category>C# 便利メモ</category></item>
<item><title>Visual Studio のフォントを変更する方法</title><link>https://csharp.sql55.com/visual-studio/how-to-change-font-in-visual-studio.php</link><description>Visual Studio のフォントを変更する方法&lt;br&gt;&lt;br&gt; &lt;br&gt;Visual Studio のフォントを変更したい&lt;br&gt;Visual Studio ではエディタやウインドウなどのフォントや文字のサイズを自由に変更することができます。&lt;br&gt;&lt;br&gt;Visual Studio の言語を英語から日本語に変更すると、テキストエディターのフォントが 「 MS ゴシック 」 に変更されてしまいました。&lt;br&gt;&lt;br&gt;Visual Studio のフォントを変更する方法 0&lt;br&gt;&lt;br&gt;好みの問題ですが、私は 「 MS ゴシック 」 じゃないほうがいいので、フォントを 「 Consolas 」 に変更しようと思います。&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;Visual Studio のフォントを変更する方法&lt;br&gt;フォントを変更するには、まず [ツール] メニューから [オプション] 画面を開きます。&lt;br&gt;&lt;br&gt;Visual Studio のフォントを変更する方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;左側で [フォントおよび色] をクリックすると、右側にフォントや色の設定画面が表示されます。&lt;br&gt;&lt;br&gt;Visual Studio のフォントを変更する方法 2&lt;br&gt;&lt;br&gt;普段コードを書くところは 「テキストエディター」 なので、「 MS ゴシック 」 が選ばれていることがわかります。&lt;br&gt;&lt;br&gt;&lt;br&gt;[設定の表示] 箇所で、フォントや色を変更したいウインドウなどを選択します。 表示項目ごとでもフォントを設定可能です。&lt;br&gt;&lt;br&gt;Visual Studio のフォントを変更する方法 3&lt;br&gt;&lt;br&gt;&lt;br&gt;今回は 「 テキスト エディター 」 のフォントを 「 Consolas 」 に変更し、[OK] をクリックします。&lt;br&gt;&lt;br&gt;Visual Studio のフォントを変更する方法 4&lt;br&gt;&lt;br&gt;&lt;br&gt;「 テキスト エディター 」 のフォントが 「 Consolas 」 になりました。&lt;br&gt;&lt;br&gt;Visual Studio のフォントを変更する方法 5&lt;br&gt;&lt;br&gt;&lt;br&gt;選択中のフォントと違うフォントが使われてしまっている場合は？&lt;br&gt;まれに、ここで設定されているフォントと違うフォントが使われてしまっていることがあります。&lt;br&gt;&lt;br&gt;そんな時は、フォントの設定画面で一旦他のフォントを選んで [OK] をクリックし、もう一度元のフォントを選びなおすことで、正しくフォントの設定が反映されました。&lt;br&gt;&lt;br&gt;</description><pubDate>Wed, 18 Sep 2019 13:42:00 GMT</pubDate><category>Visual Studio 入門</category></item>
<item><title>C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する</title><link>https://csharp.sql55.com/database/how-to-get-data-from-stored-procedure-with-sqldataadapter.php</link><description>C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する&lt;br&gt;&lt;br&gt; &lt;br&gt;ストアードプロシージャを実行して値を取得する&lt;br&gt;前回 「C# でストアードプロシージャの結果を SqlDataReader を使って取得する」 では、SqlDataReader を使ってアストアードプロシージャの結果を取得しました。&lt;br&gt;&lt;br&gt;今回は、SqlDataAdapter を使って、ストアードプロシージャを実行して値を取得してみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;SqlDataAdapter で結果を取得する&lt;br&gt;SqlDataAdapter を使って、ストアードプロシージャの返す結果セットを DataSet に保存してみましょう。&lt;br&gt;&lt;br&gt;Test データベースにこのような Student テーブルがあります。&lt;br&gt;&lt;br&gt;C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する 1&lt;br&gt;&lt;br&gt;次のストアードプロシージャを実行して、Student テーブルから Gender を指定してデータを取得してみましょう。&lt;br&gt;&lt;br&gt;C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する 2&lt;br&gt;&lt;br&gt;&lt;br&gt;以下のコードで、ストアードプロシージャを実行して、結果を SQL Server データベースからデータを取得することができます。&lt;br&gt;&lt;br&gt;string connString = ConfigurationManager.ConnectionStrings[&quot;DB1&quot;].ConnectionString;&lt;br&gt;&lt;br&gt;DataSet ds = new DataSet();&lt;br&gt;using (SqlConnection conn = new SqlConnection(connString))&lt;br&gt;{&lt;br&gt;    SqlCommand comm = new SqlCommand(&quot;uspTest1&quot;, conn);&lt;br&gt;    comm.CommandType = CommandType.StoredProcedure;&lt;br&gt;    comm.Parameters.AddWithValue(&quot;@Gender&quot;, &quot;M&quot;);&lt;br&gt;&lt;br&gt;    SqlDataAdapter da = new SqlDataAdapter(comm);&lt;br&gt;    da.Fill(ds);&lt;br&gt;}&lt;br&gt;C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する 3&lt;br&gt;&lt;br&gt;config ファイルから値を取得するのに System.Configuration、DataSet や CommandType を使うのにSystem.Data、SqlConnection や SqlDataAdapter 等を使うのには System.Data.SqlClientが必要ですので、using ディレクティブで追加しておきます。&lt;br&gt;&lt;br&gt; config ファイルからの接続文字列取得の方法を確認したい場合はこちらをご覧ください。&lt;br&gt;C# - データベースの接続文字列を App.config から取得する&lt;br&gt;&lt;br&gt;このコードで行っている処理の流れは次の通りです。&lt;br&gt;&lt;br&gt;接続文字列をコンストラクターに渡して SqlConnection を生成する。&lt;br&gt;ストアドプロシージャ名とコネクションをコンストラクターに渡して SqlCommand を生成する。&lt;br&gt;CommandType に StoredProcedure を設定する。&lt;br&gt;AddWithValue で Gender をコマンドのパラメータに追加する。&lt;br&gt;SqlCommand コンストラクターに渡して、SqlDataAdapter を生成する。&lt;br&gt;SqlDataAdapter の Fill メソッドで DataSet にストアードプロシージャの実行結果を保存する。&lt;br&gt;SqlDataAdapter の Fill メソッドは、コネクションが close の状態で呼ばれた時は、コネクションを　open してデータを取得し、close してくれるので、SqlDataAdapter の時のように事前に open しなくても大丈夫です。&lt;br&gt;&lt;br&gt;最後のデータ取得の箇所以外はほぼ SqlDataReader と同じですが、SqlDataReader と SqlDataAdapter の違いが気になる方はこちらご覧ください。&lt;br&gt; SqlDataReader と SqlDataAdapter の違いと使い分け&lt;br&gt;&lt;br&gt;&lt;br&gt;実行して、DataSet の中身を確認すると、ストアドプロシージャの実行結果が入っていますね。&lt;br&gt;&lt;br&gt;C# でストアードプロシージャの結果を SqlDataAdapter を使って取得する 4&lt;br&gt;&lt;br&gt;今回のストアードプロシージャは結果セットをひとつしか返さないので、DataSet の代わりに DataTable を Fill メソッドに渡しても大丈夫です。</description><pubDate>Fri, 19 Apr 2019 00:24:00 GMT</pubDate><category>C# とデータベース</category></item>
<item><title>C# でストアードプロシージャの結果を SqlDataReader を使って取得する</title><link>https://csharp.sql55.com/database/how-to-get-data-from-stored-procedure-with-sqldatareader.php</link><description>C# でストアードプロシージャの結果を SqlDataReader を使って取得する&lt;br&gt;&lt;br&gt; &lt;br&gt;ストアードプロシージャを実行して値を取得する&lt;br&gt;前回 「SqlDataReader を使って SQL Server データベースから値を取得する」 では、SqlDataReader を使ってアドホッククエリーの結果を取得しました。&lt;br&gt;&lt;br&gt;SQL Server を使ってシステム開発をしていると、アドホッククエリーよりもストアードプロシージャを使うことが多いと思います。&lt;br&gt;&lt;br&gt;今回は、SqlDataReader を使って、ストアードプロシージャを実行して値を取得してみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;SqlDataReader で結果を取得する&lt;br&gt;SqlDataReader を使ってストアードプロシージャを実行して、データベースから取得したデータを読んで、コンソールに書き出してみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;Test データベースにこのような Student テーブルがあります。&lt;br&gt;&lt;br&gt;C# でストアードプロシージャの結果を SqlDataReader を使って取得する 1&lt;br&gt;&lt;br&gt;次のストアードプロシージャを実行して、Student テーブルから Gender を指定してデータを取得してみましょう。&lt;br&gt;&lt;br&gt;C# でストアードプロシージャの結果を SqlDataReader を使って取得する 2&lt;br&gt;&lt;br&gt;&lt;br&gt;以下のコードで、ストアードプロシージャを実行して、結果を SQL Server データベースからデータを取得することができます。&lt;br&gt;&lt;br&gt;string connString = ConfigurationManager.ConnectionStrings[&quot;DB1&quot;].ConnectionString;&lt;br&gt;&lt;br&gt;using (SqlConnection conn = new SqlConnection(connString))&lt;br&gt;{&lt;br&gt;    conn.Open();&lt;br&gt;&lt;br&gt;    SqlCommand comm = new SqlCommand(&quot;uspTest1&quot;, conn);&lt;br&gt;    comm.CommandType = CommandType.StoredProcedure;&lt;br&gt;    comm.Parameters.AddWithValue(&quot;@Gender&quot;, &quot;M&quot;);&lt;br&gt;&lt;br&gt;    using (SqlDataReader dr = comm.ExecuteReader())&lt;br&gt;    {&lt;br&gt;        while (dr.Read())&lt;br&gt;        {&lt;br&gt;            Console.WriteLine(string.Format(&quot;{0}: {1} {2}&quot;,&lt;br&gt;                                            dr[&quot;StudentNo&quot;],&lt;br&gt;                                            dr[&quot;FirstName&quot;],&lt;br&gt;                                            dr[&quot;LastName&quot;]));&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;C# でストアードプロシージャの結果を SqlDataReader を使って取得する 3&lt;br&gt;&lt;br&gt;config ファイルから値を取得するのに System.Configuration、CommandType を使うのにSystem.Data、SqlDataReader を使うのには System.Data.SqlClientが必要ですので、using ディレクティブで追加しておきます。&lt;br&gt;&lt;br&gt; config ファイルからの接続文字列取得の方法を確認したい場合はこちらをご覧ください。&lt;br&gt;C# - データベースの接続文字列を App.config から取得する&lt;br&gt;&lt;br&gt;このコードで行っている処理の流れは次の通りです。&lt;br&gt;&lt;br&gt;接続文字列をコンストラクターに渡して SqlConnection を生成する。&lt;br&gt;コネクションを open する。&lt;br&gt;ストアドプロシージャ名とコネクションをコンストラクターに渡して SqlCommand を生成する。&lt;br&gt;CommandType に StoredProcedure を設定する。&lt;br&gt;AddWithValue で Gender をコマンドのパラメータに追加する。&lt;br&gt;SqlCommand の ExecuteReader メソッドを呼んで、SqlDataReader を生成する。&lt;br&gt;SqlDataReader の Read メソッド を While ループで実行することで、1 行ずつ読み込む。&lt;br&gt;読んだ行をコンソールにフォーマットして書き出す。&lt;br&gt;&lt;br&gt;アドホッククエリーの時との違いは SqlCommand を生成する際にストアドプロシージャ名を渡して、CommandType に StoredProcedure を設定するところです。&lt;br&gt;&lt;br&gt;SqlDataReader の Read メソッドはまだ行がある時は true、もうない時は　false を返してくれるので、While(dr.Read()) としておけば 全行読み終わった時点で while ループを抜けてくれます。&lt;br&gt;&lt;br&gt;SqlConnection や SqlDataReader は using ステートメントを使っておかないと、Exception でコードパスが飛んだ時に、Close し忘れる可能性がでてきてしまいますので、using を使いましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;こちらが実行結果です！&lt;br&gt;&lt;br&gt;C# でストアードプロシージャの結果を SqlDataReader を使って取得する 4</description><pubDate>Fri, 19 Apr 2019 00:21:00 GMT</pubDate><category>C# とデータベース</category></item>
<item><title>C# で SqlDataReader を使って SQL Server データベースから値を取得する</title><link>https://csharp.sql55.com/database/how-to-get-data-from-sql-server-database-using-sqldatareader.php</link><description>C# で SqlDataReader を使って SQL Server データベースから値を取得する&lt;br&gt;&lt;br&gt; &lt;br&gt;SQL Server データベースから値を取得する&lt;br&gt;SqlDataReader はデータベースから取得したレコードを順番に読んでいくのに便利なクラスです。&lt;br&gt;&lt;br&gt;今回は、SqlDataReader の簡単な使い方についてです。&lt;br&gt;&lt;br&gt;&lt;br&gt;SqlDataReader によるデータの取得&lt;br&gt;SqlDataReader を使ってデータベースから取得したデータを読んで、コンソールに書き出してみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;Test データベースの Student テーブルからデータを取得する、次ようなクエリーがあります。&lt;br&gt;&lt;br&gt;C# で SqlDataReader を使って SQL Server データベースから値を取得する 1&lt;br&gt;&lt;br&gt;&lt;br&gt;以下のコードで、クエリーの結果を SQL Server データベースからデータを取得することができます。&lt;br&gt;&lt;br&gt;string connString = ConfigurationManager.ConnectionStrings[&quot;DB1&quot;].ConnectionString;&lt;br&gt;string queryString = &quot;SELECT StudentID, FirstName, LastName FROM Student;&quot;;&lt;br&gt;&lt;br&gt;using (SqlConnection conn = new SqlConnection(connString))&lt;br&gt;{&lt;br&gt;    SqlCommand comm = new SqlCommand(queryString, conn);&lt;br&gt;    conn.Open();&lt;br&gt;&lt;br&gt;    using (SqlDataReader dr = comm.ExecuteReader())&lt;br&gt;    {&lt;br&gt;        while (dr.Read())&lt;br&gt;        {&lt;br&gt;            Console.WriteLine(string.Format(&quot;{0}: {1} {2}&quot;,&lt;br&gt;                                            dr[&quot;StudentID&quot;],&lt;br&gt;                                            dr[&quot;FirstName&quot;],&lt;br&gt;                                            dr[&quot;LastName&quot;]));&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;C# で SqlDataReader を使って SQL Server データベースから値を取得する 2&lt;br&gt;&lt;br&gt;SqlDataReader を使うのには System.Data.SqlClient、config ファイルから値を取得するのに System.Configuration が必要ですので、using ディレクティブで追加しておきます。&lt;br&gt;&lt;br&gt; config ファイルからの接続文字列取得の方法を確認したい場合はこちらをご覧ください。&lt;br&gt;C# - データベースの接続文字列を App.config から取得する&lt;br&gt;&lt;br&gt;このコードで行っている処理の流れは次の通りです。&lt;br&gt;&lt;br&gt;接続文字列をコンストラクターに渡して SqlConnection を生成する。&lt;br&gt;アドホック・クエリとコネクションをコンストラクターに渡して SqlCommand を生成する。&lt;br&gt;コネクションを open する。&lt;br&gt;SqlCommand の ExecuteReader メソッドを呼んで、SqlDataReader を生成する。&lt;br&gt;SqlDataReader の Read メソッド を While ループで実行することで、1 行ずつ読み込む。&lt;br&gt;読んだ行をコンソールにフォーマットして書き出す。&lt;br&gt;&lt;br&gt;SqlDataReader の Read メソッドはまだ行がある時は true、もうない時は　false を返してくれるので、While(dr.Read()) としておけば 全行読み終わった時点で while ループを抜けてくれます。&lt;br&gt;&lt;br&gt;SqlConnection や SqlDataReader は using ステートメントを使っておかないと、Exception でコードパスが飛んだ時に、Close し忘れる可能性がでてきてしまいますので、using を使いましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;こちらが実行結果です！&lt;br&gt;&lt;br&gt;C# で SqlDataReader を使って SQL Server データベースから値を取得する 3</description><pubDate>Thu, 28 Feb 2019 22:52:00 GMT</pubDate><category>C# とデータベース</category></item>
<item><title>SqlDataReader と SqlDataAdapter の違いと使い分け</title><link>https://csharp.sql55.com/database/sql-data-reader-vs-sql-data-adapter.php</link><description>SqlDataReader と SqlDataAdapter の違いと使い分け&lt;br&gt;&lt;br&gt; &lt;br&gt;SqlDataReader と SqlDataAdapter の違い&lt;br&gt;SQL Server データベースからデータを取得する際には、SqlClient の SqlDataReader クラスか SqlDataAdapter クラスが良く使われます。&lt;br&gt;&lt;br&gt;ここでは、SqlDataReader と SqlDataAdapter の違いについて見てみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;SqlDataReader クラス&lt;br&gt;SqlDataReader と SqlDataAdapter の違いと使い分け 1&lt;br&gt;&lt;br&gt;SqlDataReader は SQL Server データベースから取得したレコードを前から順番に読んで行くのに使われます。&lt;br&gt;&lt;br&gt;1 行 1 行処理するので、SqlDataAdapter と比べて速く、メモリーの使用量も少なくてすみます。&lt;br&gt;&lt;br&gt;データを全て取得するのを待たなくても取得したレコードを使って他の処理をすることができます。&lt;br&gt;&lt;br&gt;ですが、SqlDataReader が使われている間はコネクションは open のままの状態になります。&lt;br&gt;&lt;br&gt;その SqlDataReader を close するまで、同じコネクションで他のデータを取得したりすることができませんので、使い終わったらすぐに close しましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;SqlDataAdapter クラス&lt;br&gt;SqlDataReader と SqlDataAdapter の違いと使い分け 2&lt;br&gt;&lt;br&gt;SqlDataAdapter の Fill メソッドを使うと、SQL Server から送られてきたデータをがばっと DataSet や DataTable に保存することができます。&lt;br&gt;&lt;br&gt;データを全て取得し終わるまで他の処理はできません。&lt;br&gt;&lt;br&gt;処理にオーバーヘッドがあるので、SqlDataReader よりもメモリを使います。&lt;br&gt;&lt;br&gt;私は普段使わないですが、SqlDataAdapter のメソッドを使って、データベースへデータを保存することも可能です。&lt;br&gt;&lt;br&gt;SqlDataAdapter の Fill メソッドは、コネクションが close の状態で呼ばれた時は、コネクションを　open して、データを取得して、close します。 コネクションが open の状態で呼ばれた時は、データを取得した後、そのまま open にしておきます。&lt;br&gt;&lt;br&gt;&lt;br&gt;SqlDataReader と SqlDataAdapter の使い分け&lt;br&gt;SqlDataReader と SqlDataAdapter の使い分けですが、上記の違いをふまえて、状況に応じて使えばよいと思います。&lt;br&gt;&lt;br&gt;データベースで取得したデータを DataSet や DataTable に保持して、その後の処理を行いたいような時は、SqlDataAdapter を使うのが便利だと思います。&lt;br&gt;&lt;br&gt;前から順番に読んで処理していくだけで良かったり、DataSet や DataTable に取得したデータを保存する必要がないような時は SqlDataReader のほうが速くて良いと思います。&lt;br&gt;&lt;br&gt;&lt;br&gt;SqlDataReader の Close について&lt;br&gt;先ほど書いたように、SqlDataReader は使い終わったらできるだけ早く close したほうが良いです。&lt;br&gt;&lt;br&gt;SqlDataReader.Close メソッドですが、 マイクソロフトのドキュメントを見ると using ステートメントを使っていても明示的に Close しているようです。&lt;br&gt;&lt;br&gt;SqlDataReader と SqlDataAdapter の違いと使い分け 3</description><pubDate>Tue, 26 Feb 2019 19:36:00 GMT</pubDate><category>C# とデータベース</category></item>
<item><title>C# - データベースの接続文字列を App.config から取得する</title><link>https://csharp.sql55.com/database/get-connection-string-from-app-config.php</link><description>C# - データベースの接続文字列を App.config から取得する&lt;br&gt;&lt;br&gt; &lt;br&gt;データベースの接続文字列&lt;br&gt;データベースの接続文字列は App.config や Web.config などの config ファイルに設定しておくことが多いと思います。&lt;br&gt;&lt;br&gt;ここでは、みなさん一度は通る、データベースの接続文字列を App.config から取得する方法をご紹介します。&lt;br&gt;&lt;br&gt;&lt;br&gt;データベース接続文字列&lt;br&gt;データベース接続文字列はデータプロバイダーや認証方法などによって違ってきます。&lt;br&gt;&lt;br&gt;Microsoft SQL Server へ接続する時のおすすめは SqlClient のプロバイダーで、例えば　「 SqlClient のプロバイダーを使って、Windows 認証で、ローカルにある MSSQLSERVER2017 という名前付きインスタンスの Test データベースに接続する 」 ための接続文字列は次のように設定することができます。&lt;br&gt;&lt;br&gt;C# - データベースの接続文字列を App.config から取得する 1&lt;br&gt;&lt;br&gt;&lt;connectionStrings&gt;&lt;br&gt;  &lt;add name=&quot;DB1&quot; &lt;br&gt;       providerName=&quot;System.Data.SqlClient&quot;&lt;br&gt;       connectionString=&quot;Server=.\MSSQLSERVER2017;Database=Test;Integrated Security=SSPI;&quot;/&gt;&lt;br&gt;&lt;/connectionStrings&gt;&lt;br&gt;&lt;br&gt;「 SqlClient のプロバイダーを使って、SQL Server 認証で、IP アドレス 209.85.128.*** にある、デフォルトインスタンスの SQL Server の Test データベースに接続する 」 ための接続文字列は次のように設定することができます。&lt;br&gt;&lt;br&gt;C# - データベースの接続文字列を App.config から取得する 2&lt;br&gt;&lt;br&gt;&lt;connectionStrings&gt;&lt;br&gt;  &lt;add name=&quot;DB1&quot; &lt;br&gt;       providerName=&quot;System.Data.SqlClient&quot;&lt;br&gt;       connectionString=&quot;Server=209.85.128.***;Database=Test;Uid=sa;Pwd=*******&quot;/&gt;&lt;br&gt;&lt;/connectionStrings&gt;&lt;br&gt;&lt;br&gt;App.config からデータベースの接続文字列を取得する&lt;br&gt;先ほどのようなデータベースの接続文字列を App.config ファイルから取得してみましょう。&lt;br&gt;&lt;br&gt;ConfigurationManager クラスを使いたいので参照に System.Configuration を追加します。&lt;br&gt;&lt;br&gt;ソリューションエクスプローラーの [参照] を選択して右クリックし [参照の追加] を選択します。&lt;br&gt;&lt;br&gt;C# - データベースの接続文字列を App.config から取得する 3&lt;br&gt;&lt;br&gt;&lt;br&gt;参照マネージャーの画面が出てくるので、左側で [アセンブリ] を選択し、検索するなどして System.Configuration を見つけて選択し、[OK] をクリックします。&lt;br&gt;&lt;br&gt;C# - データベースの接続文字列を App.config から取得する 4&lt;br&gt;&lt;br&gt;C# - データベースの接続文字列を App.config から取得する 5&lt;br&gt;&lt;br&gt;&lt;br&gt;参照を追加したら、using ディレクティブで、System.Configuration を指定しておきます。&lt;br&gt;&lt;br&gt;using System.Configuration;&lt;br&gt;C# - データベースの接続文字列を App.config から取得する 6&lt;br&gt;&lt;br&gt;&lt;br&gt;そうすれば、次のようにデータベース接続文字列を取得できます。&lt;br&gt;&lt;br&gt;string db = ConfigurationManager.ConnectionStrings[&quot;DB1&quot;].ConnectionString;&lt;br&gt;C# - データベースの接続文字列を App.config から取得する 7</description><pubDate>Wed, 20 Feb 2019 01:33:00 GMT</pubDate><category>C# とデータベース</category></item>
<item><title>C# で日付をフォーマットされた文字列に変換する</title><link>https://csharp.sql55.com/cookbook/format-datetime.php</link><description>C# で日付をフォーマットされた文字列に変換する&lt;br&gt;&lt;br&gt; &lt;br&gt;日付をフォーマットされた文字列に変換する&lt;br&gt;DateTime 型の値をフォーマットされた文字列に変換したい時、よくありますよね。&lt;br&gt;&lt;br&gt;ここでは、日付を文字列に変化する際に良く使うフォーマットの例を書いておこうと思います。&lt;br&gt;&lt;br&gt;&lt;br&gt;DateTime.ToString([フォーマット文字列])で変換&lt;br&gt;DateTime.ToString() メソッドにフォーマット文字列を渡して、文字列に変換します。&lt;br&gt;&lt;br&gt;DateTime d = DateTime.ParseExact(&quot;2019-02-01 20:05:06.401&quot;, &lt;br&gt;				 &quot;yyyy-MM-dd HH:mm:ss.fff&quot;,&lt;br&gt;				 CultureInfo.InvariantCulture);&lt;br&gt;&lt;br&gt;Debug.WriteLine(d.ToString(&quot;yyyy-MM-dd HH:mm:ss.fff&quot;)); // 2019-02-01 20:05:06.401&lt;br&gt;Debug.WriteLine(d.ToString(&quot;yyyy/MM/dd HH:mm:ss&quot;));     // 2019/02/01 20:05:06&lt;br&gt;Debug.WriteLine(d.ToString(&quot;yyyy/M/d HH:mm:ss&quot;));       // 2019/2/1 20:05:06&lt;br&gt;Debug.WriteLine(d.ToString(&quot;yy/M/d HH:mm:ss&quot;));         // 19/2/1 20:05:06&lt;br&gt;Debug.WriteLine(d.ToString(&quot;yyyyMMddHHmmss&quot;));          // 20190201200506&lt;br&gt;Debug.WriteLine(d.ToString(&quot;MM/dd/yyyy HH:mm:ss&quot;));     // 02/01/2019 20:05:06&lt;br&gt;C# で日付をフォーマットされた文字列に変換する 1&lt;br&gt;&lt;br&gt;&lt;br&gt;同じフォーマット文字列を渡しても、カルチャーによって変換後の文字列が変わってくる場合があります。&lt;br&gt;&lt;br&gt;例えば、CultureInfo.CurrentCulture が日本 (ja-JP)の場合と、アメリカ (en-US)の場合では次のように違います。&lt;br&gt;&lt;br&gt;DateTime d = DateTime.ParseExact(&quot;2019-02-01 20:05:06.401&quot;, &lt;br&gt;				 &quot;yyyy-MM-dd HH:mm:ss.fff&quot;,&lt;br&gt;				 CultureInfo.InvariantCulture);&lt;br&gt;                                    &lt;br&gt;// CurrentCulture を日本 (ja-JP) に設定する&lt;br&gt;CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(&quot;ja-JP&quot;);&lt;br&gt;Debug.WriteLine(d.ToString(&quot;----- ja-JP -----&quot;));&lt;br&gt;Debug.WriteLine(d.ToString(&quot;d&quot;));                       // 2019/02/01&lt;br&gt;Debug.WriteLine(d.ToString(&quot;G&quot;));                       // 2019/02/01 20:05:06&lt;br&gt;Debug.WriteLine(d.ToString(&quot;yyyy/MM/dd hh:mm:ss tt&quot;));  // 2019/02/01 08:05:06 午後&lt;br&gt;Debug.WriteLine(d.ToString(&quot;MMM&quot;));     // 2&lt;br&gt;Debug.WriteLine(d.ToString(&quot;MMMM&quot;));    // 2月&lt;br&gt;Debug.WriteLine(d.ToString(&quot;ddd&quot;));     // 金&lt;br&gt;Debug.WriteLine(d.ToString(&quot;dddd&quot;));    // 金曜日&lt;br&gt;&lt;br&gt;// CurrentCulture をアメリカ (en-US) に設定する&lt;br&gt;CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(&quot;en-US&quot;);&lt;br&gt;Debug.WriteLine(d.ToString(&quot;----- en-US -----&quot;));&lt;br&gt;Debug.WriteLine(d.ToString(&quot;d&quot;));                       // 2/1/2019&lt;br&gt;Debug.WriteLine(d.ToString(&quot;G&quot;));                       // 2/1/2019 8:05:06 PM&lt;br&gt;Debug.WriteLine(d.ToString(&quot;MM/dd/yyyy hh:mm:ss tt&quot;));  // 02/01/2019 08:05:06 PM&lt;br&gt;Debug.WriteLine(d.ToString(&quot;MMM&quot;));     // Feb&lt;br&gt;Debug.WriteLine(d.ToString(&quot;MMMM&quot;));    // February&lt;br&gt;Debug.WriteLine(d.ToString(&quot;ddd&quot;));     // Fri&lt;br&gt;Debug.WriteLine(d.ToString(&quot;dddd&quot;));    // Friday&lt;br&gt;C# で日付をフォーマットされた文字列に変換する 2&lt;br&gt;&lt;br&gt;&lt;br&gt;最後にカルチャーを指定して変換したい場合は次のように指定できます。&lt;br&gt;&lt;br&gt;この例では、ドイツ(de-DE)の CultureInfoを生成して、第二引数として DateTime.ToString() メソッドに渡しています。&lt;br&gt;&lt;br&gt;DateTime d = DateTime.ParseExact(&quot;2019-02-01 20:05:06.401&quot;, &lt;br&gt;				 &quot;yyyy-MM-dd HH:mm:ss.fff&quot;,&lt;br&gt;                                 CultureInfo.InvariantCulture);&lt;br&gt;&lt;br&gt;// カルチャーを指定して変換する&lt;br&gt;Debug.WriteLine(d.ToString(&quot;G&quot;,&lt;br&gt;                CultureInfo.CreateSpecificCulture(&quot;de-DE&quot;)));   // 01.02.2019 20:05:06&lt;br&gt;C# で日付をフォーマットされた文字列に変換する 3</description><pubDate>Tue, 15 Jan 2019 01:00:00 GMT</pubDate><category>C# 便利メモ</category></item>
<item><title>C# からユーザー定義テーブル型変数をストアードプロシージャに渡す方法</title><link>https://csharp.sql55.com/database/how-to-execute-stored-procedure-with-user-defined-table-type.php</link><description>C# からユーザー定義テーブル型変数をストアードプロシージャに渡す方法&lt;br&gt;&lt;br&gt; &lt;br&gt;ユーザー定義テーブル型変数&lt;br&gt;複数のレコードを一度にストアドプロシージャに渡して処理したい時には、SQL Server のユーザー定義テーブル型を使うと便利です。&lt;br&gt;&lt;br&gt;SQL Server 入門の 「ユーザー定義テーブル型変数を使って、ストアドプロシージャに複数のレコードを一度に渡す」 では、ユーザー定義テーブル型変数と、それを引数として受け取るストアードプロシージャを作り、SQL Server Management Studio から実行してみました。&lt;br&gt;&lt;br&gt;今回は、そこで作ったストアードプロシージャ uspStudentSave を C# から実行する方法をご紹介します。&lt;br&gt;&lt;br&gt;&lt;br&gt;C# からユーザー定義テーブル型変数をストアードプロシージャに渡す&lt;br&gt;おさらいですが、実行前の Student テーブルはこのようになっています。&lt;br&gt;&lt;br&gt;C# からユーザー定義テーブル型変数をストアードプロシージャに渡す方法 1&lt;br&gt;&lt;br&gt;ストアードプロシージャ uspStudentSave は、ユーザー定義のテーブル型変数 StudentTableType を引数として受けとって、Student テーブルの更新（Inesrt/Update/Delete）を行います。&lt;br&gt;&lt;br&gt;StudentID は Identity カラムで、新規レコードには StudentID = 0 がクライアントプログラムで設定されているものとします。&lt;br&gt;&lt;br&gt;C# からユーザー定義テーブル型変数をストアードプロシージャに渡す方法 2&lt;br&gt;&lt;br&gt; 生成するスクリプトは 「ユーザー定義テーブル型変数を使って、ストアドプロシージャに複数のレコードを一度に渡す」 を参照してください。&lt;br&gt;&lt;br&gt;今回は Student テーブルから値を引いてきて、それを変更し、保存してみましょう。&lt;br&gt;&lt;br&gt;まず、以下のストアドプロシージャ uspStudentSelectを実行して、Student テーブルから全レコードを取得します。&lt;br&gt;&lt;br&gt;CREATE PROCEDURE uspStudentSelect&lt;br&gt;AS&lt;br&gt;BEGIN&lt;br&gt;&lt;br&gt;	SELECT	StudentID,&lt;br&gt;		FirstName,&lt;br&gt;		LastName,&lt;br&gt;		Birthday,&lt;br&gt;		Gender&lt;br&gt;	FROM	Student;&lt;br&gt;&lt;br&gt;END&lt;br&gt;次に、StudentID = 1 の LastName を Yamamoto に変更し、StudentID = 2 のレコードを削除し、新しい Student レコードを一行追加します。&lt;br&gt;&lt;br&gt;そして、最後に uspStudentSave を実行して変更を保存するコードは以下の通りです。&lt;br&gt;&lt;br&gt;// Student テーブルのデータを取得&lt;br&gt;DataTable dtStudent = new DataTable();&lt;br&gt;using (SqlConnection conn =&lt;br&gt;            new SqlConnection(ConfigurationManager.ConnectionStrings[&quot;DB&quot;].ConnectionString))&lt;br&gt;{&lt;br&gt;    conn.Open();&lt;br&gt;&lt;br&gt;    SqlCommand cmd = new SqlCommand(&quot;uspStudentSelect&quot;, conn);&lt;br&gt;    cmd.CommandType = CommandType.StoredProcedure;&lt;br&gt;&lt;br&gt;    SqlDataAdapter sda = new SqlDataAdapter(cmd);&lt;br&gt;    sda.Fill(dtStudent);&lt;br&gt;}&lt;br&gt;&lt;br&gt;// Student テーブルのデータを変更・削除・新規挿入&lt;br&gt;DataRow[] dr1 = dtStudent.Select(&quot;StudentID = 1&quot;);&lt;br&gt;if(dr1.Length &gt; 0)&lt;br&gt;{&lt;br&gt;    dr1[0][&quot;LastName&quot;] = &quot;Yamamoto&quot;;&lt;br&gt;}&lt;br&gt;&lt;br&gt;DataRow[] dr2 = dtStudent.Select(&quot;StudentID = 2&quot;);&lt;br&gt;if (dr2.Length &gt; 0)&lt;br&gt;{&lt;br&gt;    dr2[0].Delete();&lt;br&gt;}&lt;br&gt;&lt;br&gt;DataRow drS = dtStudent.NewRow();&lt;br&gt;drS[&quot;StudentID&quot;] = 0;&lt;br&gt;drS[&quot;FirstName&quot;] = &quot;Ryoko&quot;;&lt;br&gt;drS[&quot;LastName&quot;] = &quot;Okamoto&quot;;&lt;br&gt;drS[&quot;Birthday&quot;] = &quot;1981-08-08&quot;;&lt;br&gt;drS[&quot;Gender&quot;] = &quot;F&quot;;&lt;br&gt;dtStudent.Rows.Add(drS);&lt;br&gt;&lt;br&gt;dtStudent.AcceptChanges();&lt;br&gt;&lt;br&gt;// Student テーブルのデータを保存&lt;br&gt;using (SqlConnection conn =&lt;br&gt;            new SqlConnection(ConfigurationManager.ConnectionStrings[&quot;DB&quot;].ConnectionString))&lt;br&gt;{&lt;br&gt;    conn.Open();&lt;br&gt;&lt;br&gt;    SqlCommand cmd = new SqlCommand(&quot;uspStudentSave&quot;, conn);&lt;br&gt;    cmd.CommandType = CommandType.StoredProcedure;&lt;br&gt;&lt;br&gt;    SqlParameter tvpParam = cmd.Parameters.AddWithValue(&quot;@StudentTable&quot;, dtStudent);&lt;br&gt;    tvpParam.SqlDbType = SqlDbType.Structured;&lt;br&gt;&lt;br&gt;    cmd.ExecuteNonQuery();&lt;br&gt;}&lt;br&gt;C# からユーザー定義テーブル型変数をストアードプロシージャに渡す方法 3&lt;br&gt;&lt;br&gt;ユーザー定義のテーブル型を uspStudentSave に渡しているのは緑で囲まれた部分です。&lt;br&gt;&lt;br&gt;値の入った DataTable を AddWithValue で追加して、その SqlParameter の SqlDbType を Structured に設定しています。&lt;br&gt;&lt;br&gt;&lt;br&gt;注意する点は、値の入った DataTable はユーザー定義テーブル型と構造が同じでないとエラーになります。&lt;br&gt;&lt;br&gt;今回の場合ですと、 uspStudentSelect が返すカラムがユーザー定義テーブル型と違うとエラーになります。&lt;br&gt;&lt;br&gt;ユーザー定義テーブル型と同じカラム＆型であれば、以下のような感じで DataTable を作って渡しても大丈夫です。&lt;br&gt;&lt;br&gt;DataTable dtStudent = new DataTable();&lt;br&gt;dtStudent.Columns.Add(&quot;StudentID&quot;, typeof(Int32));&lt;br&gt;dtStudent.Columns.Add(&quot;FirstName&quot;, typeof(String));&lt;br&gt;dtStudent.Columns.Add(&quot;LastName&quot;, typeof(String));&lt;br&gt;dtStudent.Columns.Add(&quot;Birthday&quot;, typeof(DateTime));&lt;br&gt;dtStudent.Columns.Add(&quot;Gender&quot;, typeof(String));&lt;br&gt;&lt;br&gt;DataRow drS1 = dtStudent.NewRow();&lt;br&gt;drS1[&quot;StudentID&quot;] = 1;&lt;br&gt;drS1[&quot;FirstName&quot;] = &quot;Taro&quot;;&lt;br&gt;drS1[&quot;LastName&quot;] = &quot;Yamada&quot;;&lt;br&gt;drS1[&quot;Birthday&quot;] = &quot;1980-02-15&quot;;&lt;br&gt;drS1[&quot;Gender&quot;] = &quot;M&quot;;&lt;br&gt;dtStudent.Rows.Add(drS1);&lt;br&gt;&lt;br&gt;上のコードを実行してみました。 こちらは保存前の dtStudent の値です。&lt;br&gt;&lt;br&gt;C# からユーザー定義テーブル型変数をストアードプロシージャに渡す方法 4&lt;br&gt;&lt;br&gt;実行後の Student テーブルの値は以下の通りです。 期待通りに更新されていますね。&lt;br&gt;&lt;br&gt;C# からユーザー定義テーブル型変数をストアードプロシージャに渡す方法 5</description><pubDate>Wed, 05 Dec 2018 01:45:00 GMT</pubDate><category>C# とデータベース</category></item>
<item><title>C# - ストアードプロシージャの OUTPUT パラメーターの値を取得する方法</title><link>https://csharp.sql55.com/database/how-to-get-out-parameter-from-stored-procedure.php</link><description>C# - ストアードプロシージャの OUTPUT パラメーターの値を取得する方法&lt;br&gt;&lt;br&gt; &lt;br&gt;ストアードプロシージャーの OUTPUT パラメーターの値を取得する&lt;br&gt;今回は C# から OUTPUT パラメーターのあるストアードプロシージャの実行して、実行後に OUTPUT パラメーターの値を取得する方法です。&lt;br&gt;&lt;br&gt;&lt;br&gt;OUTPUT パラメーターのあるストアードプロシージャ&lt;br&gt;例えば、このようなシンプルな Test テーブルがあります。&lt;br&gt;&lt;br&gt;ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 1&lt;br&gt;&lt;br&gt;ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 2&lt;br&gt;&lt;br&gt;&lt;br&gt;そして、この uspTestInsert というストアードプロシージャでは、その Test テーブルにレコードを挿入して、挿入されたレコードの、IDENTITY プロパティのプライマリーキーカラムである TestID の値を、@TestID という名前の OUTPUT パラメターにセットします。&lt;br&gt;&lt;br&gt;ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 3&lt;br&gt;&lt;br&gt;SQL Server Management Studio から実行するとこんな感じです。&lt;br&gt;&lt;br&gt;ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 4&lt;br&gt;&lt;br&gt;&lt;br&gt;C# から OUTPUT パラメーターの値を取得する&lt;br&gt;C# から uspTestInsertを実行して、 OUTPUT パラメーターである @TestID の値を次のように取得することができます。&lt;br&gt;&lt;br&gt;using (SqlConnection conn =&lt;br&gt;            new SqlConnection(ConfigurationManager.ConnectionStrings[&quot;DB&quot;].ConnectionString))&lt;br&gt;{&lt;br&gt;    conn.Open();&lt;br&gt;&lt;br&gt;    SqlCommand cmd = new SqlCommand(&quot;uspTestInsert&quot;, conn);&lt;br&gt;    cmd.CommandType = CommandType.StoredProcedure;&lt;br&gt;    cmd.Parameters.AddWithValue(&quot;@TestNameEn&quot;, &quot;English 2&quot;);&lt;br&gt;    cmd.Parameters.AddWithValue(&quot;@TestNameJp&quot;, &quot;英語２&quot;);&lt;br&gt;&lt;br&gt;    cmd.Parameters.Add(&quot;@TestID&quot;, SqlDbType.Int);&lt;br&gt;    cmd.Parameters[&quot;@TestID&quot;].Direction = ParameterDirection.Output;&lt;br&gt;&lt;br&gt;    cmd.ExecuteNonQuery();&lt;br&gt;&lt;br&gt;    int? testID = null;&lt;br&gt;    if (cmd.Parameters[&quot;@TestID&quot;].Value != DBNull.Value)&lt;br&gt;    {&lt;br&gt;        testID = Convert.ToInt32(cmd.Parameters[&quot;@TestID&quot;].Value);&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;OUTPUT パラメーターは AddWithValue ではなく Add で追加して、Parameter の Direction を Output に設定しています。&lt;br&gt;&lt;br&gt;ストアードプロシージャ実行後に、その SqlParameter.Value で値を取得できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;実行してみると、Test テーブルにレコードが挿入され、そのレコードの TestID = 5 を取得することができましたね。&lt;br&gt;&lt;br&gt;ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 5&lt;br&gt;&lt;br&gt;ストアードプロシージャの OUTPUT パラメーターの値を取得する方法 6</description><pubDate>Sat, 01 Dec 2018 02:20:00 GMT</pubDate><category>C# とデータベース</category></item>
<item><title>C# の TransactionScope のタイムアウトの設定方法</title><link>https://csharp.sql55.com/database/how-to-set-transaction-scope-timeout.php</link><description>C# の TransactionScope のタイムアウトの設定方法&lt;br&gt;&lt;br&gt; &lt;br&gt;C# の TransactionScope のタイムアウト&lt;br&gt;前回、こちらの記事で　「TransactionScope（トランザクションスコープ）の使い方 」 をご説明しました。&lt;br&gt;&lt;br&gt;基本的に長い処理をトランザクションとして実行すると、他のトランザクションをブロックしますので、なるべく長くならないようにしたほうが良いとおもいます。&lt;br&gt;&lt;br&gt;ですが、時には仕方がない時もありますよね。&lt;br&gt;&lt;br&gt;TransactionScope にもタイムアウトがあり、ConnectionTimeout や CommandTimeout を伸ばしていても、TransactionScope のタイムアウトの時間になると、Transaction Timeout のエラーになって、トランザクションが強制終了されてしまいます。&lt;br&gt;&lt;br&gt;&lt;br&gt;デフォルトの TransactionScope タイムアウトは 60 秒です。&lt;br&gt;&lt;br&gt;試しに、uspTest というストアードプロシージャーに WAITFOR DELAY で 1 分 5 秒 スリープさせるようにしておきます。&lt;br&gt;&lt;br&gt;C# の TransactionScope のタイムアウトの設定方法 1&lt;br&gt;&lt;br&gt;そして、C# から CommandTimeout　を 120 秒にして実行すると、1 分ちょっとで次のようにトランザクションタイムアウト（Transaction Timeout）になります。&lt;br&gt;&lt;br&gt;C# の TransactionScope のタイムアウトの設定方法 2&lt;br&gt;&lt;br&gt;という訳で、今回は TransactionScope のタイムアウトの設定方法をご紹介します。&lt;br&gt;&lt;br&gt;&lt;br&gt;TransactionScope のタイムアウトの設定方法&lt;br&gt;トランザクションタイムアウトの設定方法のひとつは、TransactionScope のオブジェクトを生成する際にコンストラクターでタイムアウトを指定することです。&lt;br&gt;&lt;br&gt;タイムアウト値を受け取るコンストラクターは何個かありますが、タイムアウトだけを指定したいので次のコンストラクターを使います。&lt;br&gt;&lt;br&gt;TransactionScope(TransactionScopeOption, TimeSpan)&lt;br&gt;&lt;br&gt;TransactionScopeOption には default の Required を指定しておきます。&lt;br&gt;&lt;br&gt;&lt;br&gt;トランザクションスコープのタイムアウトを 120 秒に設定する場合、コードは次のようになります。&lt;br&gt;&lt;br&gt;using (TransactionScope scope =&lt;br&gt;       new TransactionScope(TransactionScopeOption.Required, &lt;br&gt;                            TimeSpan.FromSeconds(120)))&lt;br&gt;C# の TransactionScope のタイムアウトの設定方法 3&lt;br&gt;&lt;br&gt;catch セクションには来ず、uspTest の実行が成功しました。</description><pubDate>Wed, 14 Nov 2018 02:24:00 GMT</pubDate><category>C# とデータベース</category></item>
<item><title>C# - TransactionScope（トランザクションスコープ）の使い方</title><link>https://csharp.sql55.com/database/how-to-use-transaction-scope.php</link><description>C# - TransactionScope（トランザクションスコープ）の使い方&lt;br&gt;&lt;br&gt; &lt;br&gt;C# の トランザクションとは&lt;br&gt;ここで言う 「 トランザクション 」 とは、一連の処理単位のことです。&lt;br&gt;&lt;br&gt;トランザクション内の処理は、全てが成功した時のみ確定され、処理の途中でエラーが起きた場合は、そこまでの処理をロールバックして、トランザクション処理実行前の状態まで戻ります。&lt;br&gt;&lt;br&gt;データベース側でトランザクションに入れられる時は良いですが、複数のデータベースを更新する必要があったり、途中でクライアント側処理を挟む必要があったりと、データベース側ではトランザクションに入れられない時もあると思います。&lt;br&gt;&lt;br&gt;&lt;br&gt;C# では、TransactionScope クラスを使って、簡単にデータベースに関連する処理をコード側からトランザクションとして処理することができます。&lt;br&gt;&lt;br&gt;エラーが出るとロールバックしてくれるので、データの整合性を保つのにとても便利です。&lt;br&gt;&lt;br&gt;&lt;br&gt;System.Transactions を [参照] に追加する&lt;br&gt;まず、TransactionScope を使いたいので、参照に System.Transactions を追加します。&lt;br&gt;&lt;br&gt;ソリューションエクスプローラーで [参照] を右クリックし [参照の追加] をクリックします。&lt;br&gt;&lt;br&gt;C# - トランザクションスコープの使い方 1&lt;br&gt;&lt;br&gt;&lt;br&gt;[アセンブリ] の [フレームワーク] から System.Transactions を選択し、[OK] をクリックします。&lt;br&gt;&lt;br&gt;C# - トランザクションスコープの使い方 2&lt;br&gt;&lt;br&gt;&lt;br&gt;[参照] に System.Transactions が追加されました。&lt;br&gt;&lt;br&gt;C# - トランザクションスコープの使い方 3&lt;br&gt;&lt;br&gt;&lt;br&gt;以下の using ディレクティブを追加しておいてください。&lt;br&gt;&lt;br&gt;using System.Transactions;&lt;br&gt;C# - トランザクションスコープの使い方 4&lt;br&gt;&lt;br&gt;&lt;br&gt;TransactionScope を使ってトランザクションを実行する&lt;br&gt;違うサーバにあるデータベースとの分散トランザクションも可能ですが、設定がいろいろと必要になりますので、今回は同じ PC にインストールされた別のインスタンスのデータベースに接続して試します。&lt;br&gt;&lt;br&gt;同じ PC 上にある MSSQLSERVER2017 という名前付きインスタンスと、SQLEXPRESS という名前付きインスタンス上の Test データベースに接続します。&lt;br&gt;&lt;br&gt;App.config ファイルはこんな感じです。&lt;br&gt;&lt;br&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;&lt;br&gt;&lt;configuration&gt;&lt;br&gt;  &lt;connectionStrings&gt;&lt;br&gt;    &lt;add name=&quot;DB1&quot; &lt;br&gt;         connectionString=&quot;Server=.\MSSQLSERVER2017;Database=Test;Uid=sa;Pwd=*******&quot;/&gt;&lt;br&gt;    &lt;add name=&quot;DB2&quot;&lt;br&gt;         connectionString=&quot;Server=.\SQLEXPRESS;Database=Test;Uid=sa;Pwd=*******&quot; /&gt;&lt;br&gt;  &lt;/connectionStrings&gt;&lt;br&gt;    &lt;startup&gt; &lt;br&gt;        &lt;supportedRuntime version=&quot;v4.0&quot; sku=&quot;.NETFramework,Version=v4.6.1&quot; /&gt;&lt;br&gt;    &lt;/startup&gt;&lt;br&gt;&lt;/configuration&gt;&lt;br&gt;C# - トランザクションスコープの使い方 5&lt;br&gt;&lt;br&gt;&lt;br&gt;次のコードで、TransactionScope を使って、両方のデータベースに存在する uspTest というストアドプロシージャを実行します。&lt;br&gt;&lt;br&gt;using (TransactionScope scope = new TransactionScope())&lt;br&gt;{&lt;br&gt;    using (SqlConnection conn1 = &lt;br&gt;            new SqlConnection(ConfigurationManager.ConnectionStrings[&quot;DB1&quot;].ConnectionString))&lt;br&gt;    {&lt;br&gt;        conn1.Open();&lt;br&gt;&lt;br&gt;        SqlCommand cmd1 = new SqlCommand(&quot;uspTest&quot;, conn1);&lt;br&gt;        cmd1.CommandType = CommandType.StoredProcedure;&lt;br&gt;        cmd1.Parameters.AddWithValue(&quot;ExecutedFrom&quot;, &quot;Test1&quot;);&lt;br&gt;        cmd1.ExecuteNonQuery();&lt;br&gt;&lt;br&gt;        using (SqlConnection conn2 = &lt;br&gt;                new SqlConnection(ConfigurationManager.ConnectionStrings[&quot;DB2&quot;].ConnectionString))&lt;br&gt;        {&lt;br&gt;            conn2.Open();&lt;br&gt;&lt;br&gt;            SqlCommand cmd2 = new SqlCommand(&quot;uspTest&quot;, conn2);&lt;br&gt;            cmd2.CommandType = CommandType.StoredProcedure;&lt;br&gt;            cmd2.Parameters.AddWithValue(&quot;ExecutedFrom&quot;, &quot;Test2&quot;);&lt;br&gt;            cmd2.ExecuteNonQuery();&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    scope.Complete();&lt;br&gt;}&lt;br&gt;C# - トランザクションスコープの使い方 6&lt;br&gt;&lt;br&gt;scope.Complete(); まで到達すれば、変更が反映されますが、エラーや return などで、そこに到達する前に TransactionScope のスコープを抜けると、データベースへの変更は自動的にロールバックされます。&lt;br&gt;&lt;br&gt;&lt;br&gt;uspTest の内容はこんな感じで、実行されると TestResult テーブルに @ExecutedFrom と実行時間がインサートされるだけです。&lt;br&gt;&lt;br&gt;C# - トランザクションスコープの使い方 7&lt;br&gt;&lt;br&gt;C# - トランザクションスコープの使い方 8&lt;br&gt;&lt;br&gt;&lt;br&gt;このコードを実行すると、次のように両方のデータベースの uspTest が実行され、TestResult テーブルにレコードがインサートされました。&lt;br&gt;&lt;br&gt;C# - トランザクションスコープの使い方 9&lt;br&gt;&lt;br&gt;&lt;br&gt; TransactionScope の Isolation レベル（トランザクション分離レベル）は指定可能ですが、 デフォルトは Serializable （直列化可能）になっています。&lt;br&gt;&lt;br&gt;Serializable （直列化可能）は一番強く、安全な分離レベルです。 このトランザクションが読んだデータは、このトランザクションが終わるまで他のトランザクションが変更することができません。 また、他のトランザクションがこのトランザクションに影響するような新しいデータを挿入することもできません。&lt;br&gt;&lt;br&gt;その分、一番他のトランザクションをブロックしますので、この Isolation レベルで長い処理をトランザクションとして実行しないように気をつけてくださいね！&lt;br&gt;&lt;br&gt;&lt;br&gt;MSDTC on server [サーバー名] is unavailable のエラーが出た場合&lt;br&gt;2 つめのデータベースの接続を Open した時に 「 MSDTC on server [サーバー名] is unavailable 」 というエラーが出た場合は、Distributed Transaction Coordinator サービスが停止している可能性があります。&lt;br&gt;&lt;br&gt;C# - トランザクションスコープの使い方 10&lt;br&gt;&lt;br&gt;&lt;br&gt;検索で Services.msc と入力して Services を起動してください。&lt;br&gt;&lt;br&gt;C# - トランザクションスコープの使い方 12&lt;br&gt;&lt;br&gt;&lt;br&gt;そこで Distributed Transaction Coordinator を探し、停止している場合は右クリックでサービスを開始した後で、再度実行してみてください。&lt;br&gt;&lt;br&gt;C# - トランザクションスコープの使い方 11</description><pubDate>Mon, 23 Apr 2018 18:10:00 GMT</pubDate><category>C# とデータベース</category></item>
<item><title>C# で DataTable から DISTINCT な値を取得する</title><link>https://csharp.sql55.com/cookbook/how-to-get-distinct-rows-from-datatable.php</link><description>C# で DataTable から DISTINCT な値を取得する&lt;br&gt;&lt;br&gt;DataTable から DISTINCT な値を取得する&lt;br&gt;DataTable に値が入っていて、その中の特定のカラムの DISTINCT な値を取得したいような時ありませんか？&lt;br&gt;&lt;br&gt;データベース側でやるならば SELECT DISTINCT [カラム名1], [カラム名2] FROM [テーブル名]... のような感じで簡単にできますよね。&lt;br&gt;&lt;br&gt;ここでは、C# 側で DataTable から DISTINCT な値を取得して、その結果を DataTable として取得したい際に使えるコードをご紹介します。&lt;br&gt;&lt;br&gt;&lt;br&gt;例えば以下のような dt という名前の DataTable があるとします。&lt;br&gt;&lt;br&gt;C# で DataTable から DISTINCT な値を取得する 1&lt;br&gt;&lt;br&gt;この中で、Department カラムと GroupName カラムの DISTINCT な値を持つ DataTable を取得してみましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;DataView の ToTable メソッドを使う&lt;br&gt;Linq を使ったり、いろいろな方法があるかと思いますが、ここでは DataView の ToTable メソッドを使います。&lt;br&gt;&lt;br&gt;構文は DataView.ToTable (Boolean, String[]) で、一つ目の引数に true を渡すことで、String[] で指定したカラムの DISTINCT な値を持つ新しい DataTable を取得することができます。&lt;br&gt;&lt;br&gt;&lt;br&gt;先ほどの dt という名前の DataTable から次のコードで、 Department カラムと GroupName カラムの DISTINCT な値を持つ DataTable を取得することができます。&lt;br&gt;&lt;br&gt;DataTable dtDistinct = dt.DefaultView.ToTable(true, &quot;Department&quot;, &quot;GroupName&quot;);&lt;br&gt;C# で DataTable から DISTINCT な値を取得する 2&lt;br&gt;&lt;br&gt;dt の DefaultView の ToTable メソッドを使っています。&lt;br&gt;&lt;br&gt;Department カラムと GroupName カラムの DISTINCT な値を持つ DataTable が取得できていますね。&lt;br&gt;&lt;br&gt;&lt;br&gt;また、取得できるテーブルは、dt.DefaultView.RowFilter で指定したフィルターが効きますので、必要に応じて設定してください。&lt;br&gt;&lt;br&gt;C# で DataTable から DISTINCT な値を取得する 3&lt;br&gt;&lt;br&gt;ちなみに ToTable メソッドは、 dt のレコードが 0 行であったり、dt.DefaultView.RowFilter の結果が 0 行の場合も 0 行のテーブルが返ってくるだけで、エラーになりません。</description><pubDate>Tue, 17 Apr 2018 00:05:00 GMT</pubDate><category>C# 便利メモ</category></item>
<item><title>Visual Studio の UI を英語から日本語に変更する方法</title><link>https://csharp.sql55.com/visual-studio/how-to-change-language-for-visual-studio-ui.php</link><description>Visual Studio の UI を英語から日本語に変更する方法&lt;br&gt;&lt;br&gt; &lt;br&gt;Visual Studio の UI の言語&lt;br&gt;Visual Studio の UI の言語は、使用している Windows OS の言語がデフォルトで使用されます。&lt;br&gt;&lt;br&gt;ここでは、日本語以外の Windows OS の環境で、Visual Studio の UI を日本語に変更する方法をご紹介したいと思います。&lt;br&gt;&lt;br&gt;この記事を書いている時点の最新バージョンは Visual Studio Community 2017 なので、それを使います。&lt;br&gt;&lt;br&gt;&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法&lt;br&gt;今回は英語の Windows OS を使っている人が Visual Studio を日本語で使いたい時の変更方法でご説明します。&lt;br&gt;&lt;br&gt; 他の言語でも同じような場所に設定項目があるはずですので、英語以外の方は探してみてください。&lt;br&gt;&lt;br&gt;まず、[Tools] メニューの [Options] をクリックします。&lt;br&gt;&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法 1&lt;br&gt;&lt;br&gt;&lt;br&gt;[Options] の画面が出てきますので、 左側の [International Settings] をクリックして、 [Langulage] のリストを見てみてください。&lt;br&gt;&lt;br&gt;リストに日本語が既にある方は [日本語] に変更して、[OK] をクリックして下さい。&lt;br&gt;&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法 2&lt;br&gt;&lt;br&gt; リストに日本語がない方は、下記の 「 Visual Studio の言語パックを追加する方法 」 で日本語を追加してから選択してください。&lt;br&gt;&lt;br&gt;言語設定の変更は、再起動するまで有効になりませんよ、というメッセージが出てくるので [OK] をクリックします。&lt;br&gt;&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法 11&lt;br&gt;&lt;br&gt;&lt;br&gt;その後、Visual Studio を再起動すると、メニューなどが日本語になります。&lt;br&gt;&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法 3&lt;br&gt;&lt;br&gt;&lt;br&gt;Visual Studio の言語パックを追加する方法&lt;br&gt;以下のような状態で日本語がリストにない時は、Visual Studio 日本語の言語パックをインストール必要があります。&lt;br&gt;&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法 4&lt;br&gt;&lt;br&gt;日本語の言語パックは、Visual Studio のインストーラーから追加できます。&lt;br&gt;&lt;br&gt;&lt;br&gt;Visual Studio が起動していない状態で、Visual Studio のインストーラーを起動します。&lt;br&gt;&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法 5&lt;br&gt;&lt;br&gt;&lt;br&gt;Visual Studio のインストーラーを起動したら [Modify] ボタンをクリックします。&lt;br&gt;&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法 6&lt;br&gt;&lt;br&gt;&lt;br&gt;[Language Packs] タブをクリックし、[Japanese] をチェックし、[Modify] ボタンをクリックします。 インストールには少し時間がかかります。&lt;br&gt;&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法 7&lt;br&gt;&lt;br&gt;&lt;br&gt;インストールが終わるとこの画面に戻ってくるので[Lunch] ボタンをクリックします。&lt;br&gt;&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法 9&lt;br&gt;&lt;br&gt;&lt;br&gt;先ほどのように [Tools] &gt; [Options] &gt; [International Settings] にいってみると、[日本語] が追加されていますね。&lt;br&gt;&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法 10</description><pubDate>Mon, 16 Apr 2018 17:38:00 GMT</pubDate><category>Visual Studio 入門</category></item>
<item><title>日本語以外の Windows OS で Visual Studio のインストーラーを日本語で実行する方法</title><link>https://csharp.sql55.com/visual-studio/how-to-change-language-for-visual-studio-installer.php</link><description>Visual Studio のインストーラーを日本語で実行する方法&lt;br&gt;&lt;br&gt; &lt;br&gt;Visual Studio のインストーラーの言語&lt;br&gt;Visual Studio のインストーラーの言語は、使用している Windows OS の言語がデフォルトで使用されます。&lt;br&gt;&lt;br&gt;ここでは、日本語以外の Windows OS の環境で、Visual Studio の インストーラーを日本語で実行する方法をご紹介したいと思います。&lt;br&gt;&lt;br&gt;この記事を書いている時点の最新バージョンは Visual Studio Community 2017 なので、それを使います。&lt;br&gt;&lt;br&gt; Visual Studio Community 2017 では、日本語の Windows OS を使っていらっしゃる方は何もしなくても日本語でインストーラーが立ち上がるはずですので、そのままダウンロードした exe ファイルを実行してください。&lt;br&gt;&lt;br&gt;Visual Studio の インストーラーを日本語で実行する方法&lt;br&gt;Visual Studio のインストーラーの言語を日本語にするのは簡単です。&lt;br&gt;&lt;br&gt;Visual Studio Community 2017 エディションをダウンロードしたら、そのままブラウザから実行せずにコマンドプロンプトから実行します。&lt;br&gt;&lt;br&gt; コマンドプロンプトを開くには、検索ボックスで cmdとタイプすると出てきます。&lt;br&gt;Visual Studio のインストーラーを日本語で実行する方法 1&lt;br&gt;&lt;br&gt;そして、 &gt;cd [ディレクトリのパス] でカレントディレクトリを移動できます。&lt;br&gt;&lt;br&gt;日本語にするには、exe ファイルの名前に続けて --locale ja-JP のオプションをつけて実行します。&lt;br&gt;&lt;br&gt;例えば、私の場合は、C:\Users\Tomoko\Downloads にダウンロードして、ファイル名が vs_community__1430453331.1523085517.exe だったので、次のように実行しました。&lt;br&gt;&lt;br&gt;&gt;vs_community__1430453331.1523085517.exe --locale ja-JP&lt;br&gt;&lt;br&gt;Visual Studio のインストーラーを日本語で実行する方法 2&lt;br&gt;&lt;br&gt;そうするとインストーラーがこのように日本語で起動します。&lt;br&gt;&lt;br&gt;Visual Studio のインストーラーを日本語で実行する方法 3&lt;br&gt;&lt;br&gt;&lt;br&gt;インストーラーを日本語で起動すると、デフォルトで言語パックにも日本語だけにチェックが入ります。&lt;br&gt;&lt;br&gt;Visual Studio のインストーラーを日本語で実行する方法 4&lt;br&gt;&lt;br&gt;&lt;br&gt;そのままインストールすると、Visual Studio の UI も日本語になります。&lt;br&gt;&lt;br&gt;Visual Studio のインストーラーを日本語で実行する方法 5</description><pubDate>Mon, 16 Apr 2018 16:42:00 GMT</pubDate><category>Visual Studio 入門</category></item>
<item><title>最初の C# プログラム</title><link>https://csharp.sql55.com/programing/hello-world-in-csharp.php</link><description>最初の C# プログラム&lt;br&gt;&lt;br&gt; &lt;br&gt;最初の C# プログラム&lt;br&gt;前回 「 C# とは？ 」 で、C# とは何かについて軽くご説明しました。&lt;br&gt;&lt;br&gt;それでは、試しに C# で簡単なプログラムを書いてみましょう。&lt;br&gt;&lt;br&gt; Visual Studio の Community エディションを使いますのでインストールがまだの方はこちらをご参考にインストールしてください。&lt;br&gt; Visual Studio の Community エディションのインストール方法&lt;br&gt;&lt;br&gt;Visual Stuido を起動したら、[ファイル] メニューから [新規作成] &gt; [プロジェクト] を選択します。&lt;br&gt;&lt;br&gt;最初の C# プログラム 1&lt;br&gt;&lt;br&gt;&lt;br&gt;[新しいプロジェクト] 画面が出てくるので [Windows フォームアプリケーション] を選択します。 名前を MyFirstApp とし、保存場所は変更したければ変更してください。&lt;br&gt;&lt;br&gt;その他の項目は今回はそのままで [OK] をクリックします。&lt;br&gt;&lt;br&gt;最初の C# プログラム 2&lt;br&gt;&lt;br&gt;&lt;br&gt;そうすると、次のような画面が表示されます。 どんと中央に表示されているのが フォーム (Form) というもので、これから作る画面の土台になります。&lt;br&gt;&lt;br&gt;最初の C# プログラム 3&lt;br&gt;&lt;br&gt;&lt;br&gt;フォームにボタンをひとつ追加してみましょう。 画面の左上あたりにある [ツールボックス] をクリックします。&lt;br&gt;&lt;br&gt;最初の C# プログラム 4&lt;br&gt;&lt;br&gt; もし左側に [ツールボックス] が出ていない場合は、メニューの [表示] &gt; [ツールボックス] で表示できます。&lt;br&gt;最初の C# プログラム 6&lt;br&gt;&lt;br&gt;[ツールボックス]が表示されたら、[すべての Windows フォーム] をクリックします。&lt;br&gt;&lt;br&gt;最初の C# プログラム 5&lt;br&gt;&lt;br&gt;&lt;br&gt;Windows フォームのコントロールがいろいろ表示されますので、その中から [button] を選択して、フォームの上にドラッグ＆ドロップします。&lt;br&gt;&lt;br&gt;最初の C# プログラム 7&lt;br&gt;&lt;br&gt;最初の C# プログラム 8&lt;br&gt;&lt;br&gt;&lt;br&gt;追加した [button1] をダブルクリックすると、次のような Form1.cs というコードが書かれたファイルが開きます。&lt;br&gt;&lt;br&gt;最初の C# プログラム 9&lt;br&gt;&lt;br&gt;&lt;br&gt;それでは、いよいよ最初の C# のコードを書いてみましょう！&lt;br&gt;&lt;br&gt;button1_Click メソッドの中に次のコードを追加してください。&lt;br&gt;&lt;br&gt;string msg = &quot;Hello, World!&quot;;&lt;br&gt;MessageBox.Show(msg);&lt;br&gt;最初の C# プログラム 10&lt;br&gt;&lt;br&gt;button1_Click メソッドは、先ほど追加した [button1] ボタンがクリックされた時に実行されるコードです。&lt;br&gt;&lt;br&gt;このコードは Hello, World! と書かれたメッセージボックスを表示します。&lt;br&gt;&lt;br&gt;&lt;br&gt;書けたら上にある [開始] ボタンをクリックしてください。 コードがビルドされ実行されます。&lt;br&gt;&lt;br&gt;最初の C# プログラム 11&lt;br&gt;&lt;br&gt;&lt;br&gt;次のような、[button1]ボタンがひとつだけ配置された画面が立ち上がりますので、[button1] ボタンをクリックしてみてください。&lt;br&gt;&lt;br&gt;最初の C# プログラム 12&lt;br&gt;&lt;br&gt;&lt;br&gt;Hello, World! と書かれたメッセージボックスが出てきましたね！&lt;br&gt;&lt;br&gt;最初の C# プログラム 13&lt;br&gt;&lt;br&gt;&lt;br&gt;大きな画面に [button1] ボタンひとつで不格好ですが、これでも Windows アプリの完成です。&lt;br&gt;&lt;br&gt;以下の bin フォルダーの中にある MyFirstApp.exe ファイルを .NET Framework が入っている他の PC にコピーしてもちゃんと動きますよ！&lt;br&gt;&lt;br&gt;最初の C# プログラム 14</description><pubDate>Sat, 14 Apr 2018 00:51:00 GMT</pubDate><category>C# プログラミング入門</category></item>
<item><title>C# とは？</title><link>https://csharp.sql55.com/programing/what-is-csharp.php</link><description>C# とは？&lt;br&gt;&lt;br&gt; &lt;br&gt;C# とは？&lt;br&gt;C# とはマイクロソフトが開発した、C 言語系のオブジェクト指向のプログラミング言語です。&lt;br&gt;&lt;br&gt;C や C++、Jave をやったことがある方には、なじみやすい言語だと思います。&lt;br&gt;&lt;br&gt;&lt;br&gt;C# は、.NET Framework で使用できるメインのプログラミング言語です。&lt;br&gt;&lt;br&gt;.NET Framework はマイクロソフトが開発した、共通言語ランタイム (CLR) と .NET Framework クラスライブラリで構成された、アプリケーション開発・実行環境です。&lt;br&gt;&lt;br&gt;C# などで書かれたソースコードを中間言語にコンパイルし、それを共通言語ランタイム (CLR) が実行することによって、言語に依存しない開発環境や実行環境を提供しています。&lt;br&gt;&lt;br&gt;簡単に言うと、いろんな言語でプログラムできて、どこでも動くアプリケーションにする為の仕組みです。&lt;br&gt;&lt;br&gt;&lt;br&gt;C# を使った開発には、マイクロソフトの統合開発環境である Microsoft Visual Studio がよく使われています。&lt;br&gt;&lt;br&gt;Visual Studio には、個人開発者には無料の Community エディションも提供されています。&lt;br&gt;&lt;br&gt;その Visual Studio の Community エディションを使って、C# のプログラミングを学んでいきましょう。&lt;br&gt;&lt;br&gt; Visual Studio の Community エディションを使いますのでインストールがまだの方はこちらをご参考にインストールしてください。&lt;br&gt; Visual Studio の Community エディションのインストール方法&lt;br&gt;次へ  最初の C# プログラム</description><pubDate>Sat, 14 Apr 2018 00:47:00 GMT</pubDate><category>C# プログラミング入門</category></item>
<item><title>C# プログラミング入門</title><link>https://csharp.sql55.com/programing/</link><description>C# プログラミング入門&lt;br&gt;&lt;br&gt; &lt;br&gt;初心者向けの C# プログラミング入門ページです。&lt;br&gt;&lt;br&gt;ここにある記事を一通りざっと読んで試したら、C# プログラミングの基本は OK! となるように記事を書いていこうと思っています。&lt;br&gt;&lt;br&gt;&lt;br&gt;プログラミング言語の入門書では、コマンドプロンプトから実行するコンソールアプリケーションプログラムを作って言語を学ぶことが多いと思います。&lt;br&gt;&lt;br&gt;このサイトでは、コンソールアプリケーションではなく、Windows フォーム (Windows Forms) というマイクロソフトの GUI ライブラリを使って、Windows アプリを作りながら C# のプログラミングを学びます。&lt;br&gt;&lt;br&gt;初めて Windows フォームを使ってプログラムをする方は、すごく簡単に Windows アプリができるので、驚かれるかもしれません &lt;br&gt;&lt;br&gt; Windows アプリを作るには WPF という　GUI のサブシステムを使う方法もありますが、UI の自由度が高い変わりにプログラミング経験がない方には少し複雑な部分がありますので、本サイトでは Windows フォームを使います。&lt;br&gt;&lt;br&gt;それでは、C# プログラミングを学んでいきましょう。&lt;br&gt;&lt;br&gt;Visual Studio という統合開発環境を使いますので、まだインストールしていない方は先にインストールしておいてください。&lt;br&gt;&lt;br&gt; Visual Studio の Community エディションのインストール方法&lt;br&gt;&lt;br&gt;&lt;br&gt;C# とは？&lt;br&gt;最初の C# プログラム</description><pubDate>Sat, 14 Apr 2018 00:41:00 GMT</pubDate><category>C# プログラミング入門</category></item>
<item><title>Visual Studio の Community エディションのインストール方法</title><link>https://csharp.sql55.com/visual-studio/how-to-install-visual-studio.php</link><description>Visual Studio の Community エディションのインストール方法&lt;br&gt;&lt;br&gt; &lt;br&gt;Visual Studio の Community エディションのインストール方法&lt;br&gt;前回 「 Microsoft Visual Studio とは？ 」 では Visual Studio とは何かについて軽くご説明しました。&lt;br&gt;&lt;br&gt;ここでは、Visual Studio の Community エディションの、簡単なインストール方法を順を追ってご紹介したいと思います。&lt;br&gt;&lt;br&gt;この記事を書いている時点のの最新バージョンは Visual Studio Community 2017 なので、それをインストールします。&lt;br&gt;&lt;br&gt;&lt;br&gt;Microsoft SQL Server をインストールする&lt;br&gt;1. まずは 以下のページから Visual Studio の Community エディションをダウンロードしましょう。&lt;br&gt;&lt;br&gt; もしダウンロードページが変わってしまっている場合は、Google で 「 Visual Studio　ダウンロード 」 で検索するとすぐに見つかると思います。&lt;br&gt; Microsoft - Visual Studio のダウンロードのページ&lt;br&gt;&lt;br&gt;Visual Studio のインストール 1&lt;br&gt;&lt;br&gt;&lt;br&gt;2. ダウンロードした exe ファイル （vs_community*.exe） を実行すると、インストールウィザードが立ち上がるので [続行] をクリックします。&lt;br&gt;&lt;br&gt;Visual Studio のインストール 2&lt;br&gt;&lt;br&gt;&lt;br&gt;3. 「ワークロード（必要な機能セット）」 を選択します。 ここでは Windows の 「ユニバーサル Windows プラットホーム開発」 と 「.Netデスクトップ開発」 を選択しました。&lt;br&gt;&lt;br&gt; ワークロードは後からでもインストールできるので、ここでは気軽に選んで大丈夫です。&lt;br&gt;Visual Studio のインストール 3&lt;br&gt;&lt;br&gt; 英語の OS で Visual Studio を日本語で使えるようにしたい方は、ここの 「Language Packs」 で 「Japanese」 を 選択しておきます。&lt;br&gt;Visual Studio のインストール 4&lt;br&gt;&lt;br&gt;選択したら [インストール] をクリックします。&lt;br&gt;&lt;br&gt;&lt;br&gt;4. インストールが始まります。 結構時間がかかるので、他のことをしてお待ちください &lt;br&gt;&lt;br&gt;Visual Studio のインストール 5&lt;br&gt;&lt;br&gt;&lt;br&gt;5. 「再起動が必要です」 と言ってきますので、Windows を再起動してください。&lt;br&gt;&lt;br&gt;Visual Studio のインストール 6&lt;br&gt;&lt;br&gt;&lt;br&gt;6. 再起動が終わったら、スタートメニューやサーチから Visual Studio 2017 を探して起動します。&lt;br&gt;&lt;br&gt;Visual Studio のインストール 7&lt;br&gt;&lt;br&gt;&lt;br&gt;7. 「ようこそ」 画面が出てきます。 もちろんサインインやサインアップしてもよいですが、ここでは 「後で行う。」 にしておきます。&lt;br&gt;&lt;br&gt;Visual Studio のインストール 9&lt;br&gt;&lt;br&gt;&lt;br&gt;8. 開発環境を設定する画面が出てきます。 C# プログラミングの勉強をするので、開発設定には [Visual C#] を選んでください。 配色はお好みで選んでください。&lt;br&gt;&lt;br&gt; これらの設定も後から変更できますので、気楽に選んでください。&lt;br&gt;Visual Studio のインストール 10&lt;br&gt;&lt;br&gt;選んだら [Visual Studio の開始] ボタンをクリックします。&lt;br&gt;&lt;br&gt;&lt;br&gt;Visual Studio 2017 の画面が立ち上がります。 インストールはこれで完了です。&lt;br&gt;&lt;br&gt;Visual Studio のインストール 11</description><pubDate>Sat, 14 Apr 2018 00:35:00 GMT</pubDate><category>Visual Studio 入門</category></item>
<item><title>Microsoft Visual Studio とは？</title><link>https://csharp.sql55.com/visual-studio/what-is-visual-studio.php</link><description>Microsoft Visual Studio とは？&lt;br&gt;&lt;br&gt; &lt;br&gt;Microsoft Visual Studio とは？&lt;br&gt;Microsoft Visual Studio とは、マイクロソフトが提供している統合開発環境 (IDE) です。&lt;br&gt;&lt;br&gt; 統合開発環境 (IDE) というのは、コードエディタやコンパイラ、デバッガなど、ソフトウエアの開発に必要ものを、まとめて便利に利用できるようにした開発環境です。&lt;br&gt;&lt;br&gt;Visual Studio を使って、次のようなアプリケーションソフトウェアを開発することができます。&lt;br&gt;&lt;br&gt;Windows アプリ&lt;br&gt;Web アプリ&lt;br&gt;モバイルアプリ&lt;br&gt;IoT アプリ&lt;br&gt;ゲーム アプリ&lt;br&gt;Azure アプリ&lt;br&gt;特に Windows 系の開発にはなくてはならない開発環境です。&lt;br&gt;&lt;br&gt;&lt;br&gt;サポートされている言語には以下のようなものがあります。&lt;br&gt;&lt;br&gt;C#&lt;br&gt;Visual Basic&lt;br&gt;F#&lt;br&gt;C++&lt;br&gt;HTML&lt;br&gt;JavaScript&lt;br&gt;TypeScript&lt;br&gt;Python&lt;br&gt;その中でも C# は、多くの機能を活用できるメインの言語と言われています。&lt;br&gt;&lt;br&gt;&lt;br&gt;昔は Visual Studio は有料のものしかなかったのですが、今では学生、個人、中小企業、非営利団体は無料で使える Community エディションが提供されています！&lt;br&gt;&lt;br&gt;有料のエディションを比べるとテスト系のツールなど使えない機能もありますが、基本的な開発をするのには十分な機能が含まれています。&lt;br&gt;&lt;br&gt;その Visual Studio の Community エディションを使って、C# のプログラミングを学んでいきましょう。&lt;br&gt;&lt;br&gt;&lt;br&gt;Visual Studio の Community エディションのインストール方法はこちらをご覧ください。&lt;br&gt; Visual Studio の Community エディションのインストールする</description><pubDate>Sat, 14 Apr 2018 00:28:00 GMT</pubDate><category>Visual Studio 入門</category></item>
<item><title>Visual Studio 入門</title><link>https://csharp.sql55.com/visual-studio/</link><description>Visual Studio 入門&lt;br&gt;&lt;br&gt; &lt;br&gt;Microsoft Visual Studio はマイクロソフトが提供している統合開発環境 (IDE) です。&lt;br&gt;&lt;br&gt;Windows アプリ、Web アプリ、モバイルアプリ、IoT アプリ等のアプリケーション開発することができます。&lt;br&gt;&lt;br&gt;本サイトの 「 C# プログラミング入門 」 でも Visual Studio を使ってプログラミングを学びます。&lt;br&gt;&lt;br&gt;&lt;br&gt;ここでは、Visual Studio を一度も使ったことがない方のために、Visual Studio のインストールから基本的な使い方の説明のほか、便利な機能などをご紹介します！&lt;br&gt;&lt;br&gt;Visual Studio の基本設定&lt;br&gt;Microsoft Visual Studio とは？&lt;br&gt;Visual Studio の Community エディションのインストール方法&lt;br&gt;Visual Studio の各種設定&lt;br&gt;日本語以外の Windows OS で Visual Studio のインストーラーを日本語で実行する方法&lt;br&gt;Visual Studio の UI を英語から日本語に変更する方法&lt;br&gt;</description><pubDate>Sat, 14 Apr 2018 00:24:00 GMT</pubDate><category>Visual Studio 入門</category></item>
</channel>
</rss>
