私はストアド プロシージャの初心者なので、何か簡単なことを見逃しているかもしれませんが、基本を調べて、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 のもので少し遊んでみましたが、何も修正されていないようです。