0

DB2 からレコードを取得し、VB.net の DataGridView にレコードを表示したいと考えています。レコード数が少ない場合は正常に機能します。

ただし、データベース テーブルに多数のレコードがある場合、「操作はユーザーによって取り消されました」というエラーがスローされます。誰でも私を喜ばせることができますか...

私のコードは

    Dim strSQL As String

    Dim myConn, myCommand, rs As Object

    DataGridView1.DataSource = Nothing
    rs = CreateObject("ADODB.Recordset")
    Const DB_CONNECT_STRING = "Provider=MSDASQL.1;Persist Security Info=False;User ID=cpa5k;Data Source=NP1;DSN=NP1;UID=user;PASSWORD=pass;SDSN=Default;HST=sysplex.com;PRT=4101;Initial Catalog=QA1MM;"
    myConn = CreateObject("ADODB.Connection")
    myCommand = CreateObject("ADODB.Command")
    myConn.Open(DB_CONNECT_STRING)
    myCommand.ActiveConnection = myConn
    strSQL = " query "
    rs.Open(strSQL, myConn)
    Dim myDA As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
    Dim myDS As DataSet = New DataSet
    myDA.Fill(myDS, rs, "MyTable")
    DataGridView1.DataSource = myDS.Tables(0)
    DataGridView1.Refresh()
    myConn.Close()

表示されるエラー メッセージは次のとおりです。

このダイアログ ボックスの代わりに Just-In-Time (JIT) デバッグを呼び出す方法の詳細については、このメッセージの最後を参照してください。

** * **例外テキスト** * **** System.Runtime.InteropServices.COMException (0x800A0E80): ユーザーによって操作が取り消されました。

Microsoft.VisualBasic.CompilerServices.LateBinding.InternalLateCall (オブジェクト o、型 objType、文字列名、オブジェクト [] args、文字列 [] paramnames、ブール [] CopyBack、ブール IgnoreReturn)
で Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall (オブジェクトInstance、Type Type、String MemberName、Object[] Arguments、String[] ArgumentNames、Type[] TypeArguments、Boolean[] CopyBack、Boolean IgnoreReturn) で WindowsApplication2.Form1.Button4_Click (オブジェクト送信者、EventArgs e)
で System.Windows.Forms .Control.OnClick(EventArgs e)
で System.Windows.Forms.Button.OnClick(EventArgs e)
で System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
で System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons ボタン、Int32 クリック)
System.Windows.Forms.Control.WndProc(Message& m)
で System.Windows.Forms.ButtonBase.WndProc(Message& m)
で System.Windows.Forms.Button.WndProc(Message& m)
で System.Windows.Forms.Control System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) の .ControlNativeWindow.OnMessage(Message& m) System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

私が実行しているクエリは次のとおりです。

SELECT   A.MVNDR_NBR                     
       ,A.MER_DEPT_NBR                  
      ,C.BYO_NBR                       
      ,B.MKT_NBR                       
      ,D.SKU_NBR                       
        ,A.STR_NBR                       
        ,B.BU_ID                         
        ,COALESCE(D.MIN_EFF_OH_QTY,0)    
        ,COALESCE(D.TRGT_OH_QTY,0)       
        ,D.THRH_BUOM_QTY_PCT             
        ,COALESCE(E.OH_QTY,0)            
        ,COALESCE(E.CHG_OH_QTY,0)        
        ,COALESCE(E.OO_QTY,0)            
        ,E.SKU_VLCTY_CD                  
        ,D.LEAD_TM_DAYS                  
        ,D.REV_TM_DAYS_CNT               
        ,COALESCE(D.SFTY_STK_DAYS,0)     
         ,D.ADJ_ASW_QTY                      
         ,D.MAX_INV_QTY                      
         ,D.TOT_PLNG_OVRD_DAYS               
         ,COALESCE(D.MIN_OH_QTY_DAYS,0)      
         ,F.CURR_DSVC_TYP_CD                 
         ,G.CURR_RMETH_CD                    
         ,F.DCHNL_DC_NBR                     
         ,COALESCE(F.BUY_MIN_QTY,0)          
         ,F.BUY_UOM_QTY                      
         ,COALESCE(E.CORD_ALLOC_QTY,0)       
         ,COALESCE(E.CORD_RSVD_QTY,0)          FROM     PO_AUTO_HORD_STRMV A               
         ,STR                B               
         ,MKT                C               
         ,MVNDR_SKU_STR      F               
         ,SKU_STR_LIST       G                
        ,PO_AUTO_HORD_PARM  D                   LEFT     OUTER JOIN                            
         STRSK_OH_EOO       E                   ON       E.STR_NBR        = D.STR_NBR           AND      E.SKU_NBR        = D.SKU_NBR           WHERE    A.PO_WK_DAY_NBR  = 4   AND      A.EFF_BGN_DT    <= '2011-09-22' AND      A.EFF_END_DT     > '2011-09-22'        AND      D.STR_NBR        = A.STR_NBR           AND      D.MVNDR_NBR      = A.MVNDR_NBR         AND      D.MER_DEPT_NBR   = A.MER_DEPT_NBR      AND      B.STR_NBR        = A.STR_NBR           AND      B.STR_OPEN_DT <= '2011-09-22'       AND      C.MKT_NBR        = B.MKT_NBR           AND      F.MVNDR_NBR      = A.MVNDR_NBR         AND      F.MER_DEPT_NBR   = A.MER_DEPT_NBR      AND      F.SKU_NBR        = D.SKU_NBR            AND      F.STR_NBR        = D.STR_NBR            AND      G.SKU_NBR        = D.SKU_NBR            AND      G.STR_NBR   
= D.STR_NBR            AND      F.OK_TO_ORD_FLG  = 'Y'                  AND      G.SKU_STAT_CD IN (100, 200)             AND      G.SOS_IND    IN ('V','B')           AND      F.CURR_DSVC_TYP_CD IN (1, 3)           ORDER BY A.MVNDR_NBR                            
        ,C.BYO_NBR                              
        ,B.MKT_NBR                              
        ,F.DCHNL_DC_NBR                         
        ,F.CURR_DSVC_TYP_CD                     
        ,D.SKU_NBR                              
        ,A.STR_NBR                               WITH  UR
4

1 に答える 1

0

以前にこの問題が発生したことがあります。回避策は、DB2 クライアント構成で QUERYTIMEOUTINTERVAL 設定を増やす (またはゼロに設定する - 他の問題が発生する可能性がある) ことです。

( http://www.ibm.com/developerworks/forums/message.jspa?messageID=13894231を参照)


ところで、HardCode は正しいです。.NET が (優れた IMO) ADO.NET と OLEDB を提供する場合、(特に CreateObject と遅延バインディングを介して) ADODB を使用する理由は実際にはありません。

于 2012-04-24T13:24:07.220 に答える