- PR -

テーブルへのレコードのInsert

1
投稿者投稿内容
VIVIENNE
常連さん
会議室デビュー日: 2004/08/18
投稿数: 21
投稿日時: 2004-11-29 17:42
いつもお世話になっております。

また、わからないことができたので
皆さんのお力をお貸しください。

サーバは、WindowsNTとOracle9.2です。
クライアントは、Windows2000とOracle9.2とODP.NETが入ってます。

あるテーブルにレコードをInsertしたいのですが、うまくできません。
テーブルの定義は、以下のような感じです。
テーブル名:AAA
項目1:CODE Char型 6バイト Null不可(ぷらいまりキー)
項目2:ITEM1 VerChar型 4000バイト Null許可
項目3:ITEM2 VerChar型 4000バイト Null許可

ODP.NETを使用して、VB.NETでレコードを挿入しようとしているのですが、
ITEM2とITEM3に、全角/半角すべてを含む、4000バイト以内の2000文字以上の
文字列を入れようとすると、「LONG値はLONG列にのみバインドできます。」という
エラーメッセージが、出力されてしまいます。

しかし、下記の場合には、Insertできてしまいます。
@ITEM1に、全角/半角すべてを含む、4000バイト以内の2000文字以上の
文字列をセット、ITEM2に空文字列をセット
AITEM1,ITEM2共に、全角2000文字をセット

ITEM2とITEM3に、全角/半角すべてを含む、4000バイト以内の2000文字以上の
文字列をセットしたときに、テーブルにInsertすることは、できないのでしょうか?

どなたか、おわかりになる方は、いらっしゃいますでしょうか?
よろしくお願いします。
VIVIENNE
常連さん
会議室デビュー日: 2004/08/18
投稿数: 21
投稿日時: 2004-11-29 17:47
いろいろ調べてみたのですが、
現在SQL文をバインド変数を使用して、
OracleCommandオブジェクトに、OracleParameterを追加して、
Insert処理を行っているのですが、
バインド変数を使用すると、、「LONG値はLONG列にのみバインドできます。」
という、エラーが出力されるみたいですね。

ためしに、バインド変数を使用せずにSQL文を組んでみたら、
正しく、レコードのInsertを行うことができました。

ただし、できればSQL文の変更は行いたくないため、
バインド変数を使用してもInsertが実行できるようならば
その方法が知りたいのですが、どうにか方法はないでしょうか?
VIVIENNE
常連さん
会議室デビュー日: 2004/08/18
投稿数: 21
投稿日時: 2004-12-01 14:18
自己解決いたしました。

文字コードの問題でした。
SHIFT_JISで4000バイトに区切っていたのですが、
仕様では、UNICODEで区切ることになっていたようなので、
UNICODEでやってみたら、無事Insertすることができました。

考えていただいた方、大変お手数をおかけいたしました。
今後とも、なにとぞよろしくお願いします。
1

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