从 x++ 创建存储过程

Create stored procedure from x++

今天尝试从 ax 创建存储过程时遇到了麻烦。

这是一个简单的例子:

 static void testProcedureCreation(Args _args)
 {
     MyParamsTable myParams;
     SqlStatementExecutePermission perm;

     str sqlStatement;

     LogInProperty Lp = new LogInProperty();
     OdbcConnection myConnection;
     Statement myStatement;
     ResultSet myResult;
     str temp;
     ;

     select myParams;


     LP.setServer(myParams.Server);
     LP.setDatabase(myParams.Database);
     //Lp.setUsername("sa");
     //Lp.setPassword("sa");

      sqlStatement = @"create procedure testproc
                as begin

                print 'a'

                end";
     //sqlStatement = strFmt(sqlStatement, myStr);
     info(sqlStatement);
     perm = new SqlStatementExecutePermission(sqlStatement);

     perm.assert();

     try
     {
         myConnection = new OdbcConnection(LP);
     }
     catch
     {
        info("Check username/password.");
        return;
     }



     myStatement = myConnection.createStatement();
     myResult = myStatement.executeQuery(sqlStatement);

     while (myResult.next())
     {
        temp = myResult.getString(1);
        info(temp);

        if (strScan(temp, 'Error', 1, strLen(temp)) > 0)
            throw error(temp);
    }

    myStatement.close();

    CodeAccessPermission::revertAssert();
}

老实说,在我的真实示例中,我使用了 BCP 和一些带有很多 | 的字符串连接' 和 ””。

无论如何,这是我得到的:

几个小时以来,我一直在改变和重试很多事情,然后我想到了一个好主意。

"Let's try with a much easier example and check the results!"

好吧,运气不好,结果是一样的,如上图所示。

但无缘无故,我尝试了:

exec testproc

在我的 ssms 实例中,令我惊讶的是,它有效。我的小程序在那里。

如果有人能解释这种行为,也许应该是正确的方法,那就太好了。

这个 Q/A 应该提供一个答案。 How to get the results of a direct SQL call to a stored procedure?

executeQuery 对比 executeUpdate