从 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
今天尝试从 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