tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルFor文でInsertを連続的に使う方法
記事No3945
投稿日: 2006/07/10(Mon) 08:38
投稿者T太郎
Dim table As DataTable
Dim row As DataRow

’トランザクション開始
Dim myOracleTransaction As OracleTransaction = _
      cnn.BeginTransaction()
       Dim myOracleCommand As OracleCommand = _
          cnn.CreateCommand()

    For Each table In dataSet.Tables
            For Each row In table.Rows
        'testint = stringSplit(row.ItemArray(2))
        'MessageBox.Show(stringSplit(row.ItemArray(2)))

        ' the first INSERT statement
        myOracleCommand.CommandText = _
          "Insert Into Sales_Line(SALES_NUMBER,LINE_NUMBER,TRADE_CODE,PRODUCT_CODE,&qu
ot; & _
            "QUANTITY,UNIT_CODE,PRICE,AMOUNT,TAX,ACCOUNT_TAX,MEMO," & _
            "SALES_VALUATION_COST,COST,LINE_TYPE,ORIGINAL_LINE_NUMBER," & _
            "LAST_UPDATE_DATETIME,LAST_UPDATE_EMPLOYEE) values(35,35,'1','07','1','1',
" & _
            "'54',0,0,'54','ServiceID',0,0,0,0,sysdate,'999999')"

        'Console.WriteLine("Running first INSERT statement")
        myOracleCommand.ExecuteNonQuery()

        lineflag = False
        'line2temp = row.ItemArray(1)
       i = i + 1
            Next row
        Next table

        Console.WriteLine("Committing transaction")
        myOracleTransaction.Commit()

上の処理の中で、ここのvalues (35,35 を
for文でまわしながら連番を入れてたいですが、35のところにIを入れるとエラーになるし、max
(sales_number)+1 のような関数も使えないです。
myOracleCommand.ExecuteNonQuery()のところで列がありませんというエラーがかえってきます。
ちなみにrow.ItemArray(2)はCSVファイルから読み込んだDATASETのデータが入ってます。そのデータ
セット
のデータをFOR文でまわしながらINSERT部分を入れなかった場合は中のデータを出力はすることはでき
まし
た。
いろいろ方法を考えてみたんですが、うまくいきません。
環境はvb.net 2003 にオラクル9.2を使ってます。

よろしくお願いします。

[ツリー表示へ]
タイトルRe: For文でInsertを連続的に使う方法
記事No3946
投稿日: 2006/07/10(Mon) 09:17
投稿者T太郎
自己すれですが、

'"+i+"','"+i+"'にすれば動くのはわかりましたが、FOR文は使えるんですが、

'System.InvalidCastException' のハンドルされていない例外が microsoft.visualbasic.dll で発生し

した。

追加情報 : 文字列 "LAST_UPDATE_DATETIME,LAST_UPDATE" から型 'Double' へのキャストが
有効ではありま
せん。
というエラーがでます。
otn

[ツリー表示へ]
タイトルRe: For文でInsertを連続的に使う方法
記事No3947
投稿日: 2006/07/10(Mon) 09:18
投稿者なおこ(・∀・)
お世話になります。

話をシンプルにするために。
SALES_NUMBER,LINE_NUMBER,TRADE_CODE
の 3 つの項目に値を Insert する SQL 文を生成するならば、
For Each の中でこうでしょうか。

Dim sqlBuf As System.IO.StringWriter = New System.IO.StringWriter
With sqlBuf
  .WriteLine("INSERT INTO SALES_LINE(")
  .WriteLine("SALES_NUMBER,LINE_NUMBER,TRADE_CODE")
  .WriteLine(") VALUES (")
  .WriteLine(i.Tostring() + "," + i.tostring() + ",'1'")
  .WriteLine(")")
End With
myOracleCommand.CommandText = sqlBuf.ToString()

[ツリー表示へ]
タイトルRe^2: For文でInsertを連続的に使う方法
記事No3953
投稿日: 2006/07/10(Mon) 13:33
投稿者T太郎
早速の返答ありがとうございます。

自己解決ですが、 +を&に直したらうまくいきました。
これのおかげで3日も徹夜しましたが、ようやくわかって助かりました。
会社の先輩のおかげですが、

ってことは自己解決でもないですね。

ASPでは+を使うようですが、奥が深いですね。


> お世話になります。
>
> 話をシンプルにするために。
> SALES_NUMBER,LINE_NUMBER,TRADE_CODE
> の 3 つの項目に値を Insert する SQL 文を生成するならば、
> For Each の中でこうでしょうか。
>
> Dim sqlBuf As System.IO.StringWriter = New System.IO.StringWriter
> With sqlBuf
>   .WriteLine("INSERT INTO SALES_LINE(")
>   .WriteLine("SALES_NUMBER,LINE_NUMBER,TRADE_CODE")
>   .WriteLine(") VALUES (")
>   .WriteLine(i.Tostring() + "," + i.tostring() + ",'1'")
>   .WriteLine(")")
> End With
> myOracleCommand.CommandText = sqlBuf.ToString()

[ツリー表示へ]