ディレクトリ
2.オペランドタイプの競合:nvarcharはイメージと互換性がありません
4.データベースから画像データを取得するときに、取得した画像データがnullかどうかを判断する方法の問題が発生しました
1.はじめに
最近、MVCフレームワークに基づくC#プロジェクトに取り組んでいますが、Web端末がユーザー情報をバックグラウンドで保存されているデータベースに転送し、データから取得して、Webインターフェースにエコーバックする必要があることに気付きました。いくつかの質問、ここに記録
2.オペランドタイプの競合:nvarcharはイメージと互換性がありません
問題の説明
フロントエンド情報を送信するときに、アップロードされなかった画像があります。この問題は、データベースへの書き込み時に発生します。データベースの画像タイプは画像です。
問題の原因
データベースがイメージタイプの場合、挿入ステートメントを実行すると、挿入された値がDBNull.Valueの場合、プロンプトが表示されます:オペランドタイプの競合:nvarcharはイメージと互換性がありません。この問題の理由は、DbTypeが指定されていないためです。ほとんどの場合、SqlParameterを使用する場合、パラメーターのデータ型(DbTypeまたはSqlDbType)を指定する必要はありません。ADO.Netは、値の型に従ってデータ型を自動的に決定します。ADO.Netがそれを決定できない場合でも、SQLServerデータベースサーバーは、判断のほとんどを行います(もちろん、一部のパフォーマンスは失われます)。
しかし、このプログラムの画像タイプについては、私はそれほど幸運ではありません。DbTypeが指定されておらず、データがNull / DbNullである場合、ado.netはデータタイプをnvarcharとして認識し、上記のエラーが発生します。したがって、DbTypeまたはSqlDbTypeを指定するだけです。
解決策
新しいSqlParameter( "@ Photo"、SqlDbType.Image){Value = recruitment.PASSPORT}
3. C# '(@ PERSONAL_PHOTO image、@ SURNAME nvarchar(4000)、@ MIN_NAME nvarcha'のパラメーター化クエリには、パラメーター '@PASSPORT'が必要ですが、パラメーターが指定されていません。
問題の説明
以前の問題を解決した後、新しい問題が発生し、写真はまだアップロードされていなかったため、recruitment.PASSPORT = null
問題の原因
CのnullはSQLのnullと直接考えられるため、パラメーターが指定されていないと見なされます。
解決策
CのNUllはSQLのnullと同じではありません。SQLのnullは、C#ではDBNull.Valueとして表されます。
新しいSqlParameter( "@ Photo"、SqlDbType.Image){Value = TableSqlCon.TODBNull(recruitment.PASSPORT)}
public static object TODBNull(byte[] image)
{
if (image != null)
{
return image;
}
else
{
return DBNull.Value;
}
}
4.データベースから画像データを取得するときに、取得した画像データがnullかどうかを判断する方法の問題が発生しました
問題の説明
データから取得した画像データは、recruitment.PASSPORT =(byte [])dt.Rows [0] [21]などのバイト[]タイプに強制的に変換されますが、画像が空の場合、エラーが報告されます:システムを使用できません。 DBNullはバイト[]に変換され、それが空であるかどうかを判断しようとします(dt.Rows [0] [21]!= Null)およびその他の試みがすべて失敗した場合。
解決策
正しい記述:if(dt.Rows [0] [21]はSystem.DBNull)
if (dt.Rows[0][21] is System.DBNull)
{
recruitment.PASSPORT = null;
}
else
{
recruitment.PASSPORT =(byte[]) dt.Rows[0][21];
}
参考資料
https://blog.csdn.net/kaixin_5200_kaixin/article/details/23115953
https://blog.csdn.net/weixin_30270889/article/details/97839671