- PR -

SQLServerのImageデータの更新について

1
投稿者投稿内容
とら
ベテラン
会議室デビュー日: 2006/10/04
投稿数: 54
投稿日時: 2007-01-26 13:54
VisualStudio 2005 C#で開発を行っております。


CREATE TABLE TestTBL(
Dec01 decimal(12,0),
Dte01 datetime,
Img01 image,
CONSTRAINT PK_TestTBL PRIMARY KEY(
Dec01)
)
SQLServer上に、上記のようなテーブルを作成し、以下のようなコードでデータの追加を行っております。(コネクションをとる部分は省略して有ります)

//変数定義部分
Nullable<decimal> Dec01;
Nullable<DateTime> Dte01;
byte[] Img01;


SqlCommand mySQLCommand = new SqlCommand();
mySQLCommand.Connection = mDbConn;
mySQLCommand.Transaction = mDbTran;
mySQLCommand.CommandText = "INSERT INTO TestTBL(Dec01,Dte01,Img01) Values("@01","@02","@03")";

mySQLCommand.Parameters.Add(
new SqlParameter("@01",(Dec01 == null) ? (object)DBNull.Value : Dec01));

mySQLCommand.Parameters.Add(
new SqlParameter("@02",(Dte01 == null) ? (object)DBNull.Value : Dte01));

mySQLCommand.Parameters.Add(
new SqlParameter("@03",(Img01 == null) ? (object)DBNull.Value : Img01));

このときに、Dec01、Dte01に関しては、変数の値にnull値が格納されている場合は、
nullで作成されるのですが、Img01がnull値の場合に「オペランド型の不整合: nvarchar はimage と互換性がありません」の例外が発生してしまいます。

null以外の値が格納されている場合は、問題なく作成が行われます。


Img01はイメージデータを格納させるための項目です。

どうやら、Imageについてはnull値の場合、発行するSQL自体から項目を除外しなければ
成らないように見受けられるのですが、何か、これに関する情報をお持ちの方は
いらっしゃいませんでしょうか?
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2007-01-26 17:11
とらさん、こんばんは。

パラメータのSQL Server データ型を指定した場合はどうなります?

コード:
mySQLCommand.Parameters.Add(
  "@03", SqlDbType.Image).Value = (Img01 == null) ? (object)DBNull.Value : Img01;


みたいな感じで。
とら
ベテラン
会議室デビュー日: 2006/10/04
投稿数: 54
投稿日時: 2007-01-26 18:42
きくちゃんさん。

実は、これもやってみて、できなかったように思っていたんですが、
私の勘違いでした。
ご指摘のとおりにやってみたら、うまくいきました。

ありがとう御座いました。
1

スキルアップ/キャリアアップ(JOB@IT)