通过数据服务存储过程

时间:2016-06-22 15:55:00

标签: c# stored-procedures wcf-data-services

我有这个存储过程:

public void render(float delta) {


        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        kid.draw(batch);
       if(gameOver())//24
        {
            gameisover=true;
            globalcounter--;
            Gdx.app.log(Float.toString(globalcounter), "counter");
            if(globalcounter==0) {
                game.setScreen(new GameOverScreen(game, level));
                dispose();
            }
        }
        if(gameisover==true) {
            globalcounter--;
            Gdx.app.log(Float.toString(globalcounter), "counter");
            if (globalcounter == 0) {
                game.setScreen(new GameOverScreen(game, level));
                dispose();
            }
        }
        if(nextLevel())
        {
            prefs = Gdx.app.getPreferences("levels");
            String name=prefs.getString("level", " ");
            if(name==" ") {
                prefs.putString("level", Float.toString(level + 1));
                prefs.flush();
            }

            else {

                prefs.putString("level", Float.toString(level+1));
                prefs.flush();
            }
            game.setScreen(new Celebration(game,level+1));
            dispose();
        }
    }

    public boolean gameOver()//25
    {
        if(player.currentState== Collector.State.DEAD )// will show the game over screen after 3 seconds
        {

            return true;
        }
        return false;
    }
    public boolean nextLevel()//25
    {
        if(player.currentState== Collector.State.SUCCESS)// will show the game over screen after 3 seconds
        {
            return true;
        }
        return false;
    }

获取下一个ID。然后我在数据服务和导入函数上添加了这个存储过程。

在我的数据服务上创建的自动代码是:

CREATE OR REPLACE PROCEDURE GET_NEXT_ID(NEXTID OUT INTEGER)
IS
BEGIN
    SELECT SQC_RS_PEDIDO.NEXTVAL INTO NEXTID FROM DUAL;
END GET_NEXT_ID;

然后在我使用的数据服务上公开这个:

public ObjectResult<Nullable<global::System.Decimal>> GET_NEXT_ID(ObjectParameter nEXTID)
{
    return base.ExecuteFunction<Nullable<global::System.Decimal>>("GET_NEXT_ID", nEXTID);
}

但是我得到了例外:

  

商店数据提供程序返回的数据读取器没有足够的列用于请求的查询。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

尝试在数据库中声明一个函数而不是一个过程。

CREATE OR REPLACE FUNCTION GET_NEXT_ID RETURN INTEGER IS

NEXTID INTEGER;

BEGIN

   SELECT SQC_RS_PEDIDO.NEXTVAL INTO NEXTID FROM DUAL;

   RETURN NEXTID;

END GET_NEXT_ID;

答案 1 :(得分:0)

您的查询期望读者将ID作为选择返回,但您的存储过程设置为通过输出变量传回参数。简单的修复只是返回select语句中的值,而不是将其插入到输出变量中。