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()

显示的错误消息是:

有关调用即时 (JIT) 调试而不是此对话框的详细信息,请参阅此消息的末尾。

** * **异常文本** * **** System.Runtime.InteropServices.COMException (0x800A0E80):操作已被用户取消。

在 Microsoft.VisualBasic.CompilerServices.LateBinding.InternalLateCall(对象 o,类型 objType,字符串名称,对象 [] 参数,字符串 [] 参数名,布尔 [] CopyBack,布尔 IgnoreReturn)
在 Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall(对象Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, Boolean IgnoreReturn) at WindowsApplication2.Form1.Button4_Click(Object sender, EventArgs e)
at System.Windows.Forms .Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs 事件)
在 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 .ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(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 Client 配置中增加 QUERYTIMEOUTINTERVAL 设置(或设置为零 - 这可能会产生其他问题)。

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


顺便说一句,HardCode 是对的,当 .NET 提供(上级,IMO)ADO.NET 和 OLEDB 时,真的没有理由使用 ADODB(尤其是通过 CreateObject 和后期绑定!)。

于 2012-04-24T13:24:07.220 回答