DOBON.NET DOBON.NETプログラミング掲示板過去ログ

SQLにて

分類:[.NET]

OS : XP VB.net

SQLコマンドでAS400にデータをあげようとする際に、
『'System.Data.OleDb.OleDbException' のハンドルされていない例外がsystem.windows.forms.dll で発生しました。』
というエラーで落ちてしまいます。

あげるデータが文字型の場合だとうまくいくのですが、
数値型だとおちてしまいます。

恐らくSQLコマンドの書き方だと思うのですが、
『Dim test As Interger
olecmd = New OleDb.OleDbCommand("INSERT INTO XXXXXX.XXXX(△△△△△△△△)" & " values(' & test & ')", Olecn)
olecmd.ExecuteNonQuery()』
↑はどこを直せばいいのでしょうか?
> あげるデータが文字型の場合だとうまくいくのですが、
> 数値型だとおちてしまいます。

数値フィールドに文字列、また逆も叱りですが、挿入することは出来ません。
格納先のDBの型は正しいのでしょうか?
  • 題名: Re[2]: SQLにて
  • 著者: 赤い鼻
  • 日時: 2003/10/27 14:42:45
  • ID: 1146
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
>
> 数値フィールドに文字列、また逆も叱りですが、挿入することは出来ません。
> 格納先のDBの型は正しいのでしょうか?


さっそくのお返事有り難うございます。
どちらも数値型で確認済みです。
数値型の宣言の仕方(10進,16進)が違っているのでしょうか?
■No1144に返信(赤い鼻さんの記事)
> OS : XP VB.net
>
> SQLコマンドでAS400にデータをあげようとする際に、
> 『'System.Data.OleDb.OleDbException' のハンドルされていない例外がsystem.windows.forms.dll で発生しました。』
> というエラーで落ちてしまいます。
>
> あげるデータが文字型の場合だとうまくいくのですが、
> 数値型だとおちてしまいます。
>
> 恐らくSQLコマンドの書き方だと思うのですが、
> 『Dim test As Interger
> olecmd = New OleDb.OleDbCommand("INSERT INTO XXXXXX.XXXX(△△△△△△△△)" & " values(' & test & ')", Olecn)
> olecmd.ExecuteNonQuery()』
> ↑はどこを直せばいいのでしょうか?
>

ダブルコーテーションですが
values(' & test & ')", Olecn) を
values('" & test & "')", Olecn) へ
変えてみて再度、実行してもらえますか
■No1148に返信(fukuさんの記事)
> ■No1144に返信(赤い鼻さんの記事)
>>OS : XP VB.net
>>
>>SQLコマンドでAS400にデータをあげようとする際に、
>>『'System.Data.OleDb.OleDbException' のハンドルされていない例外がsystem.windows.forms.dll で発生しました。』
>>というエラーで落ちてしまいます。
>>
>>あげるデータが文字型の場合だとうまくいくのですが、
>>数値型だとおちてしまいます。
>>
>>恐らくSQLコマンドの書き方だと思うのですが、
>>『Dim test As Interger
>>olecmd = New OleDb.OleDbCommand("INSERT INTO XXXXXX.XXXX(△△△△△△△△)" & " values(' & test & ')", Olecn)
>>olecmd.ExecuteNonQuery()』
>>↑はどこを直せばいいのでしょうか?
>>
>
> ダブルコーテーションですが
> values(' & test & ')", Olecn) を
> values('" & test & "')", Olecn) へ
> 変えてみて再度、実行してもらえますか
>
>
間違いました。
values(' & test & ')", Olecn) を

values ('" & test & "', Olecn)"です。

もしOlecnも変数であれば
values ('" & test & "'," & Olecn & ")"です。

Olecnが文字列であれば
values ('" & test & "','" & Olecn & "')"です。

以上
>
> ダブルコーテーションですが
> values(' & test & ')", Olecn) を
> values('" & test & "')", Olecn) へ
> 変えてみて再度、実行してもらえますか
>
>
そちらの方法でもやってみましたが、この書き方では数値型はうまくいきませんでした。
文字型の場合は、この書き方でもうまくいく事は判明しております。
  • 題名: Re[3]: SQLにて
  • 著者: fuku
  • 日時: 2003/10/27 17:14:06
  • ID: 1158
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No1151に返信(赤い鼻さんの記事)
>>
>>ダブルコーテーションですが
>>values(' & test & ')", Olecn) を
>>values('" & test & "')", Olecn) へ
>>変えてみて再度、実行してもらえますか
>>
> >
> そちらの方法でもやってみましたが、この書き方では数値型はうまくいきませんでした。
> 文字型の場合は、この書き方でもうまくいく事は判明しております。

testを設定するテーブルのフィールドのデータ型と
Olecnを設定するテーブルのフィールドのデータ型を
教えていただきたいのと、
プロバイダは何(Jet4.0、Soledb、Oracle)を使っていますか?
プロバイダは『IBM AS400 OLE DB Provider』です。

testを設定するテーブルのフィールドのデータ型と
Olecnを設定するテーブルのフィールドのデータ型、とはどう意味なのですか?

わからなくてすいません。
■No1159に返信(赤い鼻さんの記事)
> プロバイダは『IBM AS400 OLE DB Provider』です。
>
> testを設定するテーブルのフィールドのデータ型と
> Olecnを設定するテーブルのフィールドのデータ型、とはどう意味なのですか?
>
> わからなくてすいません。

テーブルのフィールドのデータ型が文字列の場合は、数値を設定する
場合でもシングルコーテーションで囲む必要があります。
例えば1を設定する場合は、'1'とし1000を設定する場合は、'1000'
です。
>
> テーブルのフィールドのデータ型が文字列の場合は、数値を設定する
> 場合でもシングルコーテーションで囲む必要があります。
> 例えば1を設定する場合は、'1'とし1000を設定する場合は、'1000'
> です。
>
>
文字型の場合はうまくいくのですが、数値型があがりません。。。
> 文字型の場合はうまくいくのですが、数値型があがりません。。。

olecmd = New OleDb.OleDbCommand("INSERT INTO XXXXXX.XXXX(△△△△△△△△)" & " values(" & test & ")", Olecn)

だと思いますよ。

つまり、
INSERT INTO テーブル名 (数値型の列) VALUES ('数値')
ではなく、
INSERT INTO テーブル名 (数値型の列) VALUES (数値)
というSQL文字列になるようにしないといけないということです。
  • 題名: Re[7]: SQLにて
  • 著者: 赤い鼻
  • 日時: 2003/10/29 9:33:38
  • ID: 1187
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No1170に返信(よねKENさんの記事)
>>文字型の場合はうまくいくのですが、数値型があがりません。。。
>
> olecmd = New OleDb.OleDbCommand("INSERT INTO XXXXXX.XXXX(△△△△△△△△)" & " values(" & test & ")", Olecn)
>
> だと思いますよ。
>
> つまり、
> INSERT INTO テーブル名 (数値型の列) VALUES ('数値')
> ではなく、
> INSERT INTO テーブル名 (数値型の列) VALUES (数値)
> というSQL文字列になるようにしないといけないということです。
>
大変有り難うございました。
教えて頂いたとおりの結果、無事あげる事ができました。

何度も何度も最後までご回答頂き本当に有り難うございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板