VB.NET - 表单执行在ExecuteScalar之后停止

时间:2011-11-28 06:13:17

标签: vb.net visual-studio-2010

在我应用了一些条件之前它运行良好...现在我的表单执行在ExecuteScalar之后停止......任何想法?这是我的代码:

       Dim IDNomina As String = Format(Date.Now, "ddMMyyyy")

        conn = New MySqlConnection("Data Source=localhost; user id=root; password=; database=arj;")
        connCalc = New MySqlConnection("Data Source=localhost; user id=root; password=; database=arj;")
        connActualizar = New MySqlConnection("Data Source=localhost; user id=root; password=; database=arj;")
        myCommand.Connection = conn

        If Date.Now.Day <> 14 And Date.Now.Day <> 15 And Date.Now.Day <> 28 And Date.Now.Day <> 29 And Date.Now.Day <> 30 Then
            MessageBox.Show("La nómina no puede ser generada ya que no se encuentra en días de pago")
            Me.Close()
        Else
            myCommand.CommandText = "SELECT MAX(IDNomina) FROM Nomina WHERE left(cast(`IDEmpleado` as char(10)), 8) = ?IDNomina"
            myCommand.Parameters.AddWithValue("?IDNomina", IDNomina)

            conn.Open()
            Dim Ejecucion As Object = myCommand.ExecuteScalar '<--- Here is where execution stops and open the incomplete form
            conn.Close()
            If IsDBNull(Ejecucion) Then
...

2 个答案:

答案 0 :(得分:0)

问题很可能是声明参数。

尝试更改以下行:

        myCommand.CommandText = "SELECT MAX(IDNomina) FROM Nomina WHERE left(cast(`IDEmpleado` as char(10)), 8) = ?IDNomina"
        myCommand.Parameters.AddWithValue("?IDNomina", IDNomina)

为:

        myCommand.CommandText = "SELECT MAX(IDNomina) FROM Nomina WHERE left(cast('IDEmpleado' as char(10)), 8) = @IDNomina"
        myCommand.Parameters.AddWithValue("@IDNomina", IDNomina)

此外,添加一个try / catch处理程序,以便您可以查看报告的其他错误(如果有)。

<强>更新

感谢the link提供的Miika L,上述内容仅适用于MySQL 5.0之前的版本,除非old syntax=yes添加到连接字符串中。如果您使用的是5.0之前的版本,则这是您需要使用的语法;否则,您的原始语法是正确的,并且您在代码中的其他位置有问题。

有一点需要注意:IDEmpleado周围的引号可能会导致问题,但您需要找出确切的位置和发生的错误。

答案 1 :(得分:0)

提取SQL并在Management Studio /您选择的SQL工具中运行它,并查看生成的错误(如果有)。