NullReferenceException

Posted by muchag | C#,Library & PlugIn & AddIn | 2018-03-22 (木) 21:29:17

【環境】
NPOI: 2.3.0
Visual C#: 15.5.4(2017)
.NETFramework,Version: v4.6.1
経緯

ある日突然例外がスローされた。

System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。

見てみると、どうやら GetRow で失敗しているんだけど
何故か、22行目で突然失敗。

原因

CreateRow や CreateCell をしておらず
その行やセルが見つからない、ってことだったみたい。
stack overflow:NullReferenceException accessing Workbook Cells with NPOI(2016-10-23)

これが、一から作成してる Excel ファイルではなく
テンプレートファイルを用意していたので
ちょっと混乱した。

7行目から先は全て空白行なので
21行目も22行目もどちらも空白行なのに
22行目で突然エラー。

解決(邪道)

どうやら、21行目までは見た目空白行であっても
書式設定か何かがされていて、NPOI 側で既存と認識できていたみたい。

なので、100行目までフォント色を「自動」にしたら
例外にならなくなった。

本当は CreateRow や CreateCell をするのが正しい解決方法だと思うけど
今晩は時間がないので暫定で対応。

C#,Library & PlugIn & AddIn | 2018-03-22 (木) 21:29:17 |

DateTime

Posted by muchag | C# | 2018-02-11 (日) 12:23:12


MSDN:DateTime 構造体
MSDN:DateTime 演算子
MSDN:DateTimeOffset 構造体

【環境】
Visual C#: 15.5.4(2017)
文字列変換

dobon.net:日時(DateTimeオブジェクト)を文字列に変換する

C# | 2018-02-11 (日) 12:23:12 |

双方向データバインド

Posted by muchag | C# | 2018-02-11 (日) 12:21:07

【環境】
Visual C#: 15.5.4(2017)
参考サイト

MSDN:とあるコンサルタントのつぶやき Part 1. 双方向データバインドの基本的な使い方(2009-02-26)
→とてもわかりやすい解説

@IT:WPF/UWP:ラジオボタンを双方向バインディングするには?[C#/VB](2016-02-03)
→ラジオボタンにおける双方向データバインド

C# | 2018-02-11 (日) 12:21:07 |

LINQ -> Where

Posted by muchag | C# | 2018-02-08 (木) 10:54:02

【環境】
Visual C#: 15.5.4(2017)
OR

if 文と同じように書けば良い。


.Where(x => x == 1 || x => x == 2)
動的に生成

C#erの備忘録:Linqの動的条件生成ライブラリ(2013-02-16)
→ありがたくライブラリを使わせていただいたけど、期待通りには動かなかった。


var condition = ConditionChain.Create(condition1).OrElse(condition2);

ここで、null になっちゃったんだったっけか。。。

C# | 2018-02-08 (木) 10:54:02 |

Database operation expected to affect 1 row(s) but actually affected 0 row(s).

Posted by muchag | C# | 2018-02-06 (火) 0:12:26

【環境】
Visual C#: 15.5.4(2017)
経緯

SQLite3 で管理しているデータを削除しようとしたら
下記エラーが出た。

{“Database operation expected to affect 1 row(s) but actually affected 0 row(s). Data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.”} Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException

データが既に更新またや削除されているよ。。。って、誰よ~TT

原因

データベースに格納されている日付文字列が「2018-02-05」となっていたため
DateTime 型で値を持っている C# では「2018-02-05 00:00:00」となり
整合性が取れなくなっていたみたい。

解決

データベース側の値を「2018-02-05 00:00:00」とすることで
エラーは出なくなった。

愚痴

そもそも SQLite のデータ型に DateTime がないから・・・。
ん~なんで、初期データを「2018-02-05」しちゃったんだろう。。。
私がアホなだけよね。。。

C# | 2018-02-06 (火) 0:12:26 |

ハッシュ値

Posted by muchag | C# | 2018-01-28 (日) 22:27:38

暗号化って、全然勉強できてないな~。
今回はまずは序章ということで、参考サイトのまんま実装してみる。
何かの記事に書いてあったけど、もう MD5 はやばいそうな。

「せめて 256 バイト以上のものを利用しましょう」とあったので
試してみた。

【環境】
Visual C#: 15.5.4(2017)
SHA256

行け!偏差値40プログラマー:[ C# ] SHA256 で文字列のハッシュ値を計算・取得する


// 文字列のハッシュ値(SHA256)を計算・取得する
protected string _GetHashedTextString(string passwd)
{
    // パスワードをUTF-8エンコードでバイト配列として取り出す
    byte[] byteValues = Encoding.UTF8.GetBytes(passwd);
 
    // SHA256のハッシュ値を計算する
    SHA256 crypto256 = new SHA256CryptoServiceProvider();
    byte[] hash256Value = crypto256.ComputeHash(byteValues);
         
    // SHA256の計算結果をUTF8で文字列として取り出す
    StringBuilder hashedText = new StringBuilder();
    for (int i = 0; i < hash256Value.Length; i++)
    {
        // 16進の数値を文字列として取り出す
        hashedText.AppendFormat("{0:X2}", hash256Value[i]);
    }
    return hashedText.ToString().ToLower();
}

ほぼ、上記サイトからいただいてきたんだけど
18行目だけ。

そもそものハッシュ値を、
Good-Tool.net:ハッシュ値の一括計算・生成ツール(無料)
で生成したため、ToLower だけ追加した。

C# | 2018-01-28 (日) 22:27:38 |

「OK」「キャンセル」

Posted by muchag | C#,Visual Studio | 2018-01-28 (日) 20:28:51

フォームの「OK」「キャンセル」ボタンのお話。

【環境】
Visual C#: 15.5.4(2017)
キー連動

フォーム表に配置したボタンに「OK」「キャンセル」の挙動を持たせる。
=Enter 押下で反応する「OK」ボタン、ECS 押下で反応する「キャンセル」ボタン。

フォームのプロパティ
AcceptButton:「OK」の挙動をするボタンの Name を設定
CancelButton:「キャンセル」の挙動をするボタンの Name を設定

手書き

下記のように手書きして、Form の Key_Down イベントへ登録する手もある。


private void Login_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
    }
    else if (e.KeyCode == Keys.Cancel)
    {
    }
}
値の受け渡し

値の受け渡し

C#,Visual Studio | 2018-01-28 (日) 20:28:51 |

アプリケーション設定

Posted by muchag | C#,Visual Studio | 2018-01-28 (日) 18:47:49

アプリケーション内の設定のこと。
preference の方が区別が付くかも?

この話、どこかの記事に書いた気がするんだけど
見つけられないので、改めて記述。

【環境】
Visual C#: 15.5.4(2017)
入れ物

プロジェクトのコンテキストメニュー [プロパティ]
左ペイン [設定]

こちらの画面で、1つずつ下記を設定していく。
名前:設定値の名称。任意。プログラム内で使用するので、アルファベットで設定してね
種類:設定値のデータ型
スコープ:
アプリケーション:全ユーザー統一
ユーザー:ユーザー毎
値:値

利用

// 取得
txtUsername.Text = Properties.Settings.Default.LoginUsername;
Properties.Settings.Default.Save();

// 設定
Properties.Settings.Default.LoginUsername = "username";
保存場所

ユーザー設定は、ユーザーの非表示のローカル アプリケーション データ フォルダーのサブフォルダー内のファイルに保存されます。

MSDN:方法 : 実行時にユーザー設定を C# で書き込む

というわけで、SQLite -> 導入 にも書いた通り

C:\Users\[user_name]\AppData\Local\Packages\(おそらくランダム文字列)\LocalState

にあるみたいだけど、上記記事は UWP の場合なわけで
フォームアプリケーションの場合は、パッケージ ID をどこで見ればいいのかしらね~。

C#,Visual Studio | 2018-01-28 (日) 18:47:49 |

Form

Posted by muchag | C# | 2018-01-23 (火) 23:16:41


MSDN:Form クラス

【環境】
Visual C#: 15.5.4(2017)
モーダル、モーダレス

MSDN:方法 : Windows フォームをモーダルおよびモードレスで表示する

モーダル

新しく開くフォームを閉じるまで、他のフォームには触れない。


Form frmAbout = new Form();
frmAbout.ShowDialog();
frmAbout.ShowDialog(this); // 親フォームを子フォームのオーナーに設定する

DialogResult dr = frmAbout.ShowDialog(); // モーダルフォームの結果がShowDialogメソッドの戻り値で返る

子フォームが閉じるまで、親フォームの処理は止まる。

モーダレス

子フォームが開いた状態でも、親フォームに触れる。


Form f= new Form();
f.Show();

子フォームが開いた後、親フォームの処理が続行する。

C# | 2018-01-23 (火) 23:16:41 |

LINQ

Posted by muchag | C# | 2018-01-23 (火) 22:10:21

Language INtegrated Query(統合言語クエリー)。

【環境】
Visual C#: 15.5.4(2017)
前提

本日勉強を始めたばかりなので、
これから!

とにかく、SQL 専用なわけではない。

LINQ プロバイダー

LINQは、アクセスするデータの種類に応じてLINQ to Objects、LINQ to SQL、LINQ to XML、LINQ to DataSetなどに分類できます

これらはLINQプロバイダーと呼ばれます。
プロバイダーはアクセスするデータソースに応じて動的に切り替わりますので、
アプリケーション開発者がプロバイダーを意識する必要はほとんどありません。

BuildINSIDER:LINQとは?[C#](2014-11-11)

おー よかった。
いっぱい出てきてわけがわからなくなってきていた。

構文

クエリー式とメソッド式がある。

参考サイト

Qiita:LINQチートシート的なもの(2017-12-08)
→ありがたや~。ちゃんと読みましょう!

netplanetes log:BindingSource.DataSource に LINQ to Entity の ObjectQuery を指定してはいけない(2009-10-10)
→まだ意味がよくわからないけど、試行錯誤の途中で、この問題に直面したような気がする。。。
MSDN:コントロールへのオブジェクトのバインド (Entity Framework)

C# | 2018-01-23 (火) 22:10:21 |
次ページへ »