none
odbc的connect奇怪問題 RRS feed

  • 問題

  • dear
    我用odbc連sybase 11, 在connect字串不變的情況下,每執行一次的executequery都new connection 讀完就 dispose.
    從系統開始這樣執行7到8次以後,要 open connection 就會錯誤.
    而且用 try ...去抓錯誤 catch ex as odbcexception 抓到錯誤,但是 ex.message 是空的.
    連線字串沒變.前幾次是ok的,後來才不行.
    真不知問題出在哪???
    謝謝您!!


    hm_sys_09
    2009年7月28日 下午 02:04

解答

  • 哦..
    謝謝您..
    我找出問題了.
    不過很讓人無言.
    原因是我在formload時加了一行程式造成的.
    me.text=me.text & "版本:980729"
    而me.text在屬性表上已先設定了"修護管理系統了"
    然後去執行我寫的一個function
    public function my_executequery(byval my_sql as string,byval my_tb as data.datatable,byval my_timeout as integer,byval my_connect as string)
    dim odbc_conn as new odbc.connect
    odbc_conn.connectionstring=my_connect
    dim odbc_comm as new odbccommand
    odbc_comm.connection=odbc_conn
    odbc_comm.commandtext-my_sql
    dim odbc_adap as new odbcdataadapter(odbc_comm)
    odbc.comm.commandtimrout=my_timeout
    try
      odbc_conn.open()
      odbc_adap.fill(my_tb)
    catch ex as odbc.odbcexection
      nsgbox(ex.message.tostring)
    finally
      odbc_adap.dispose()
      odbc_comm.dispose()
      odbc_conn.dispose()
      odbc_conn=nothing
    end try

    呼叫時
    dim dtb as new data.datatable
    my_executequery("select * from fcustom",dtb,60000,"dsn=test;uid=sa;pwd=;logintimeout=30")
    當我的formload中有
    me.text=me.text & "版本:980729"
    在 odbc_conn.open時會錯,而catch抓到了.但ex.message是空的
    當我加一行變成
    me.text="修護管理系統了"
    me.text=me.text & "版本:980729"
    則就好了 . 一切ok
    真的很怪!!
    ps..因在軍中工作,不能把程式碼帶出,只能抄一小段出來問,可能會打錯字..請見諒..
    感恩!!


    hm_sys_09
    2009年7月29日 下午 02:42
  • 要在 form_load 動屬性時,要先確認該控制項已完成建立,比如說
    Me.Show ' 先顯示再動屬性可確保完成建立
    Dim hWnd As IntPtr = Me.Handle ' 不想顯示的話,取得 Handle 也可確保控制項完成建立


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 hm_sys_09 2009年7月30日 下午 01:53
    2009年7月29日 下午 03:11

所有回覆

  • 可否將相關程式碼貼上來, 這樣比較容易處理問題.
    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年7月28日 下午 02:25
    版主
  • 哦..
    謝謝您..
    我找出問題了.
    不過很讓人無言.
    原因是我在formload時加了一行程式造成的.
    me.text=me.text & "版本:980729"
    而me.text在屬性表上已先設定了"修護管理系統了"
    然後去執行我寫的一個function
    public function my_executequery(byval my_sql as string,byval my_tb as data.datatable,byval my_timeout as integer,byval my_connect as string)
    dim odbc_conn as new odbc.connect
    odbc_conn.connectionstring=my_connect
    dim odbc_comm as new odbccommand
    odbc_comm.connection=odbc_conn
    odbc_comm.commandtext-my_sql
    dim odbc_adap as new odbcdataadapter(odbc_comm)
    odbc.comm.commandtimrout=my_timeout
    try
      odbc_conn.open()
      odbc_adap.fill(my_tb)
    catch ex as odbc.odbcexection
      nsgbox(ex.message.tostring)
    finally
      odbc_adap.dispose()
      odbc_comm.dispose()
      odbc_conn.dispose()
      odbc_conn=nothing
    end try

    呼叫時
    dim dtb as new data.datatable
    my_executequery("select * from fcustom",dtb,60000,"dsn=test;uid=sa;pwd=;logintimeout=30")
    當我的formload中有
    me.text=me.text & "版本:980729"
    在 odbc_conn.open時會錯,而catch抓到了.但ex.message是空的
    當我加一行變成
    me.text="修護管理系統了"
    me.text=me.text & "版本:980729"
    則就好了 . 一切ok
    真的很怪!!
    ps..因在軍中工作,不能把程式碼帶出,只能抄一小段出來問,可能會打錯字..請見諒..
    感恩!!


    hm_sys_09
    2009年7月29日 下午 02:42
  • 要在 form_load 動屬性時,要先確認該控制項已完成建立,比如說
    Me.Show ' 先顯示再動屬性可確保完成建立
    Dim hWnd As IntPtr = Me.Handle ' 不想顯示的話,取得 Handle 也可確保控制項完成建立


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 hm_sys_09 2009年7月30日 下午 01:53
    2009年7月29日 下午 03:11