none
請問要如何用vb.net呼叫informix的store procedure RRS feed

  • 問題

  • 假設有一個monthcomp("9608",4)的procedure 參數1表年月 參數2表增減的月份

    執行過後會回傳"9612"的值..

     

    請問在vb.net上面該如何寫才能正確的運行呢?

     

    試了很久都失敗 懇請幫忙@@~

     

    通道走odbc driver

    系統 : winXP

    2007年8月15日 上午 01:43

解答

  • HI,

     

    請將以下這一行程式:

     

    cmd1.ExecuteNonQuery()

    改成這個樣子:

     

    Try

        cmd1.ExecuteNonQuery()
    Catch ex as Exception

        MessageBox.Show(ex.Message)

    End Try

     

    看看會顯示什麼錯誤訊息?

     

    tihs

    2007年8月17日 上午 01:39
  • HI,

     

    您可以用偵錯工具進行偵錯, 看是否是執行到 cmd1.ExecuteNonQuery()就跳往Catch ex As Exception, 如果是的話, 應該是Stored Procedure 中有語法錯誤, 您的Stored Procedure製作好了以後有先在資料庫上執行看看是否可以成功執行嗎?

     

    tihs

    2007年8月18日 上午 03:38

所有回覆

  • HI,

     

    把程式貼上來瞧瞧吧.

     

    tihs

    2007年8月16日 上午 03:04
  • 以下是方法1  可行的 但是我想用另外一種方法去寫比較好.....

    hSql="Driver={IBM INFORMIX 3.82 32 BIT}; _

    Host=XXXXXXX; _

    Server=XXXXXXX; _

    Service=star1; _

    Protocol=onsoctcp; _

    Database=XXXXXX; _

    Uid=XXXXXX; _

    Pwd=XXXXXXXX; _

    DB_Locale=zh_tw.big5;Client_locale=zh_tw.big5;"

     

    Dim str_Driver As String = hSql '此為通道
            Dim conn As New System.Data.Odbc.OdbcConnection(str_Driver)

            'run  ExecuteScalar語法是"只抓第一筆資料的第一個欄位"....
            Dim str_r As New Odbc.OdbcCommand("execute procedure monthcomp('9608',4), conn) 'into str_yymm
            conn.Open()
            Dim str_yymm = str_r.ExecuteScalar 'get into str_yymm    值為( 96/08 + 4各月 )  96/12

            conn.Close()

     

     

    以下是方法2(執行會出錯..不知要怎改了)    但是我怎麼改都改不出來 一直跑錯- -  懇請指導囉~

     

    Dim str_connect = "XXXXXXXXXXXXXXXXXXXX" '此為通道
    Dim connection As New OdbcConnection(str_connect)
    connection.Open()
    'monthcomp("輸入年月",增減的年月) return 結果~ <=解釋procedure功能
    Dim cmd1 As New Odbc.OdbcCommand '= New Odbc.OdbcCommand("monthcomp('9608',4)", connection)
    cmd1.CommandText = "monthcomp"
    cmd1.CommandType = CommandType.StoredProcedure
    'cmd1.Parameters.Add(New System.Data.Odbc.OdbcParameter("@9608", System.Data.Odbc.OdbcType.Char, 16))
    'cmd1.Parameters("@9608").Value = b
    '目前使用下面寫法
    cmd1.Parameters.Add("@9608")
    cmd1.Parameters.Add(1)
    '最後就掛掉了..
    cmd1.ExecuteNonQuery()
    2007年8月16日 上午 03:13
  • HI,

     

    請將以下這一行程式:

     

    cmd1.ExecuteNonQuery()

    改成這個樣子:

     

    Try

        cmd1.ExecuteNonQuery()
    Catch ex as Exception

        MessageBox.Show(ex.Message)

    End Try

     

    看看會顯示什麼錯誤訊息?

     

    tihs

    2007年8月17日 上午 01:39
  • str_connect = str_connect
                Dim connection As New OdbcConnection(str_connect)
                connection.Open()
                Dim cmd1 As New Odbc.OdbcCommand(str_connect, connection)
                cmd1.CommandText = "monthcomp"
                cmd1.CommandType = CommandType.StoredProcedure

                cmd1.Parameters.Add(New System.Data.Odbc.OdbcParameter _

    ("@str1", System.Data.Odbc.OdbcType.Char, 16))
                cmd1.Parameters.Add(New System.Data.Odbc.OdbcParameter _

    ("@str2", System.Data.Odbc.OdbcType.Int))
                cmd1.Parameters("@str1").Value = "9608"
                cmd1.Parameters("@str2").Value = 4
                '最後就掛掉了..
                Try
                    cmd1.ExecuteNonQuery()
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                 End Try

     

    出現

    ERROR [42000] [Informix][Informix ODBC Driver][Informix]A syntax error has occurred.
    2007年8月17日 上午 06:08
  • 出現

    ERROR [42000] [Informix][Informix ODBC Driver][Informix]A syntax error has occurred.

     

    是否有相容性的問題~?

    2007年8月17日 上午 06:33
  • HI,

     

    您可以用偵錯工具進行偵錯, 看是否是執行到 cmd1.ExecuteNonQuery()就跳往Catch ex As Exception, 如果是的話, 應該是Stored Procedure 中有語法錯誤, 您的Stored Procedure製作好了以後有先在資料庫上執行看看是否可以成功執行嗎?

     

    tihs

    2007年8月18日 上午 03:38
  • 實際上procedure應不會有錯誤..

    再上面文章中的方法一  是可以被成功執行的

     

    單跑資料庫也是可以的~

     

    但是在跑cmd1.ExecuteNonQuery()時..

    就會跳往Catch ex As Exception這邊..

    出現42000的問題

    2007年8月18日 上午 03:42
  • HI,

     

    您所說的方法一是呼叫ExecuteScalar, 而方法二則是呼叫ExecuteNonQuery. 如果是在呼叫ExecuteNonQuery跳往Catch段落, 大概都是SQL敘述的問題或是參數的問題, 您可以先讓程式執行一個不需要參數的簡單SQL敘述, 証明程式可以執行成功, 再改複雜的SQL敘述, 最後再加上參數, 就可以找到寫錯的地方了

     

    tihs

    2007年8月20日 上午 02:52