今天在尝试使用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和一些字符串连接很多| '和“”。
无论如何,这是我得到的:
几个小时后,我一直在改变并重试很多事情,我想到了一个很好的想法。
“让我们尝试一个更简单的例子并检查结果!”
好的,没有运气,结果是一样的,正如你在上面的图片中看到的那样。
但无缘无故,我试图:
exec testproc
在我的ssms实例中,令我惊讶的是,它有效。我的小程序就在那里。
如果有人能够解释这种行为并且可能是正确的方法,那就太好了。
答案 0 :(得分:2)
此Q / A应该提供答案。 How to get the results of a direct SQL call to a stored procedure?
executeQuery
vs executeUpdate