![](/img/trans.png)
[英]How do you pass an output parameter from vb.net to a mysql stored procedure?
[英]VB.net to MySql Stored Procedure Error
我是存儲過程的新手,所以我可能會遺漏一些簡單的東西,但是我研究了基礎知識並且我一直在嘗試從 vb.net 代碼中集成它。 我創建了一個簡單的存儲過程(我認為),它只為今天的結果運行數據查詢:
-- 例程 DDL -- 注意:例程正文前后的注釋不會被服務器存儲
DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `GetRuntestToday`()
BEGIN
Select * From runtest.runtest_records where
Test_Date=CURDATE()
order by test_date desc, Convert(test_time_stop,DECIMAL(5,2)) desc;
END
當我登錄到主 MySql 數據庫並嘗試從 MySql 提示符運行它時,它似乎工作正常。 我只需鍵入call runtest.GetRuntestToday();
並以命令提示符文本形式返回 59 行數據。
我編寫了一個 VB.net 程序來嘗試獲取相同的數據,但我一直收到錯誤消息。 錯誤異常詳細信息是:
System.Data.Odbc.OdbcException was unhandled
ErrorCode=-2146232009
Message="ERROR [42000] [MySQL][ODBC 5.1 Driver][mysqld-5.1.51-community-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GetRuntestToday' at line 1"
Source="myodbc5.dll"
StackTrace:
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
at System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Odbc.OdbcCommand.ExecuteReader()
at MySqlHelper.mMain.DoMyStoredProcedure() in C:\vss\MySqlHelper\MySqlHelper\mMain.vb:line 2642
at MySqlHelper.mMain.Main() in C:\vss\MySqlHelper\MySqlHelper\mMain.vb:line 29
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
我正在運行的代碼是:
Public Sub DoMyStoredProcedure()
Dim MyConString As String = "My String Details"
Dim dbcRuntest As New OdbcConnection(MyConString)
Dim cmd As New OdbcCommand
Dim reader As OdbcDataReader
cmd.CommandText = "GetRuntestToday"
cmd.CommandType = CommandType.StoredProcedure
cmd.Connection = dbcRuntest
dbcRuntest.Open()
reader = cmd.ExecuteReader()
dbcRuntest.Close()
End Sub
錯誤發生在線路上:
reader = cmd.ExecuteReader()
我錯過了什么? 我沒有看到任何語法問題,存儲過程在命令提示符下工作。 我已經玩過一些 DELIMITER 的東西使它 // 而不是 $$ 但似乎沒有什么可以解決它。
您可以嘗試更改為直接調用(我還沒有測試過:
cmd.CommandType = CommandType.Text
cmd.CommandText = "CALL GetRuntestToday"
此外,編寫代碼的更好方法是:
Dim MyConString As String = "My String Details"
Using dbcRuntest As New OdbcConnection(MyConString)
dbcRuntest.Open()
Using cmd As New OdbcCommand("CALL GetRuntestToday", dbcRuntest)
cmd.CommandType = CommandType.Text
Using reader As OdbcDataReader = cmd.ExecuteReader
'do someting with reader'
End Using
End Using
End Using
Using
結構自動關閉連接並處理它(連同其他對象)。
編輯為使用 CALL 而不是 EXECUTE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.