我遇到的问题是存储过程没有把我的结果带到我的VB.NET端。当我在Mysql数据库中测试我的存储过程时,它完美无缺。所以我认为这是VB.NET方面。我尝试了很多在网上看到的方法,它们与我下面的代码非常相似。那么告诉我我做错了什么?我如何评估当我连接到DB时发生的事情,我在OUT参数中无法得到任何答案。
Try
conexion.Open()
command.Connection = conexion
command.CommandText = "DUA_ENCABEZADO_TRAERPAISORIGEN"
command.CommandType = CommandType.StoredProcedure
command.Parameters.AddWithValue("@COD_DUA", CInt(TxtCodDUA.Text))
command.Parameters("@COD_DUA").Direction = ParameterDirection.Input
command.Parameters.Add("@CODIGO_PAIS", MySqlDbType.VarChar, 2).Direction = ParameterDirection.Output
command.ExecuteNonQuery()
XML_PaisOrigen = command.Parameters(1).Value.ToString
conexion.Close()
Catch ex As Exception
MsgBox(ex.Message & vbCrLf & "Error al ejecutar << " & ex.Message,MsgBoxStyle.Critical, "Error Popup")
End Try
'XML_PaisOrigen是一个字符串
这是我的Mysql SP:
CREATE DEFINER=`root`@`localhost` PROCEDURE `DUA_ENCABEZADO_TRAERPAISORIGEN`(
IN COD_DUA INT,
OUT CODIGO_PAIS VARCHAR(2))
这是我对SP的调用并在MYSQL方面工作:
SET @COD_DUA =1;
CALL DUA_ENCABEZADO_TRAERPAISORIGEN(@COD_DUA,@CODIGO_PAIS);
SELECT @CODIGO_PAIS;
答案 0 :(得分:0)
我通常做的是将参数放入变量中,以便更容易使用。
Try
conexion.Open()
command.Connection = conexion
command.CommandText = "DUA_ENCABEZADO_TRAERPAISORIGEN"
command.CommandType = CommandType.StoredProcedure
dim p1 as sqlParameter = command.Parameters.AddWithValue("@COD_DUA", CInt(TxtCodDUA.Text))
p1.Direction = ParameterDirection.Input
dim p2 as sqlParameter = command.Parameters.Add("@CODIGO_PAIS", MySqlDbType.VarChar, 2)
p2.Direction = ParameterDirection.Output
command.ExecuteNonQuery()
XML_PaisOrigen = p.Value.ToString
conexion.Close()
Catch ex As Exception
MsgBox(ex.Message & vbCrLf & "Error al ejecutar << " & ex.Message,MsgBoxStyle.Critical, "Error Popup")
End Try
答案 1 :(得分:0)
您可以使用if运算符和IsDBNull()来避免错误。我假设你想要一个空字符串,如果存储过程返回一个NULL值:
XML_PaisOrigen = If(IsDBNull(command.Parameters(1).Value), "", command.Parameters(1).Value.ToString)
答案 2 :(得分:-1)
我得到了解决方案。 SP有时会如何运作,这真的很奇怪。首先下载此程序。我的味道是http://www.devart.com/dbforge/mysql/studio/code-debugger.html
FETCH cur_paisorigen INTO Var2;
IF Var2 = Var1 then
If v_finished = 1 then
-- SET Var_Result = Var2; It WAS HERE
leave cur_loop;
SET Var_Result = Var2; -- NEXT I TRIED HERE AND IT WORK
End If;
else
SET Var_Result = 216;
leave cur_loop;
End If;
此SET Var_Result;
确保您的设置OUT PUT变量清洁。我不得不调试我的SP。弄清楚。因为当我在MYSQL Workbench中执行SP时,它完美无缺。但是当我使用这个程序调试我的OUT变量时,它变为NULL。因此,请确保将OUT变量设置为干净。
我今天学到的另一件事。将你的变量设置在循环中而不是在循环中。