最近プログラム研修を受けて主にC#を使って管理プログラムを書いたのですが、VS2017プラットフォームでは開発過程で当然おかしな問題が多々発生するので記録しておきます。
次のような疑問があります。
注1:文字列からuniqueidentifierへの変換時に変換に失敗しました。
問題 2: ExecuteNonQuery には、すでに開いていて使用可能な接続が必要です。接続の現在の状態は閉じられています。
問題 3: CS0012 型 'Object' が参照されていないアセンブリで定義されています。アセンブリ「mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089」への参照を追加する必要があります。
現在利用されている主なデータベース構造は以下の通りです。
データベースへの接続エラーの多くは、一意の識別子 uniqueidentifier という特別なタイプの ID で報告されます。プログラム内のタイプは Guid ですが、識別子は実際にはデータベースに不可欠であるため、これらの問題も回避できません。
注1:文字列からuniqueidentifierへの変換時に変換に失敗しました。
問題の背景は、入力 ID 形式が文字列であるため、クエリ時に問題が発生することです。見やすくするために、次のように問題を SQL クエリに記述します。
Select * from Operator where id='3a9a2894-f9f6-4ffe-b8e6-a67e949f276c'
この問題には長い間悩まされてきました。プログラムの実行中に切断されることがよくあります。情報を照会する理由は何ですか...忘れました。具体的な解決策は次のとおりです。
select * from Operator where id =CAST('3a9a2894-f9f6-4ffe-b8e6-a67e949f276c' AS UNIQUEIDENTIFIER)
問題 2: ExecuteNonQuery には、すでに開いていて使用可能な接続が必要です。接続の現在の状態は閉じられています。
この質問の言い方は実に単純なのですが、何度か忘れてしまい、しばらく詰まってしまったことがあります。具体的な背景としては、クエリのためにデータベースに接続するときにエラーが報告されるということですが、解決策としては、忘れずに接続 (以下の [開く]) を開くことです。
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand commUpdate = new SqlCommand(sql, conn);
int n = commUpdate.ExecuteNonQuery();
if (n > 0)
{
flag = true;
}
}
問題 3: CS0012 型 'Object' が参照されていないアセンブリで定義されています。アセンブリ「mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089」への参照を追加する必要があります。
このエラーは非常に奇妙で奇妙なものです。具体的な症状としては、作成されたクラス ライブラリが依存関係内の System.Configuration などの一部のライブラリを参照できず、非常に奇妙なエラーが報告される可能性があります。以下が表示される場合があります。
関連するブログをほぼすべて検索しましたが、解決策は見つかりませんでした。後になって、この 2 つのクラス ライブラリのニュアンスを偶然発見しました。よく見てみると、実際には、Standard と Framework の 2 種類のクラス ライブラリがあります。最初は Standard を作成しましたが、互換性はないので後からFrameworkに変更しても問題ありません。あなたが私と同じで、フォーム アプリケーションで同様のエラーを報告する場合は、そのエラーが間違ったタイプの作成によって引き起こされているかどうかを検討できます。