Попытка вызвать процедуру и вернуть значение в этой процедуре - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь вызвать процедуру и использовать значение, которое я получаю после выполнения в моем коде.

Я создал процедуру Getdata, и я вызываю ее из ASP.NET MVC ипопробуйте использовать его.

Процедура Oracle:

    CREATE OR REPLACE PROCEDURE Getdata(v_hr_stk_out out number,v_cr_stk_out out number) Is
    r_stk  number;
    vr_stk number;
    BEGIN
    select round(sum(a.batch_wt)) into r_stk from dbprod.sm_data a where a.iss_date is null and a.cw_coil_no is not null and a.prod_cd = '37' and a.from_plant != a.hsource;
    select round(sum(a.batch_wt)) into vr_stk  from dbprod.psm_data a where a.iss_date is null and a.cw_coil_no is not null and a.prod_cd = 'C9' and a.from_plant != a.hr_source;
v_hr_stk_out:=v_hr_stk;
v_cr_stk_out :=v_cr_stk;
    END;

Сторона ASP.NET MVC:

 OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["Mycon"].ToString());
 conn.Open();

 OracleCommand command = new OracleCommand();
 command.Connection = conn;
 command.CommandText = "Getdata";
 command.CommandType = CommandType.StoredProcedure;

 OracleDataAdapter adapter = new OracleDataAdapter(command);

 DataSet dataSet = new DataSet();
 adapter.Fill(dataSet);

 conn.Close();
 return View("Home",dataSet);

Значение привязки в представлении

@using System.Data;
@model DataSet
    <table cellpadding="0" cellspacing="0">
        <tr>
            <th>A</th>
            <th>B/th>
            <th>C</th>        
        </tr>
        @foreach (DataRow row in Model.Tables[0].Rows)
        {
            <tr>
                <td>F</td>
                <td>Dataset.Tables[0]</td>
                <td>Dataset.Tables[1]</td>            
            </tr>
        }
    </table>

Значение из процедуры должно приходить и связываться в соответствующем столбце.

В настоящее время значение не сохраняется в наборе данных после вызова adapter.Fill(dataSet);.

Я новичок в ASP.NET MVC иOracle.Любая идея будет оценена

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Поскольку вы используете Fill Dataset в ADO.Net, вам нужно использовать Ref Cursors для получения данных

Измените вашу процедуру на

 CREATE OR REPLACE PROCEDURE Getdata(v_hr_stk_out OUT SYS_REFCURSOR) Is
r_stk  number;
vr_stk number;
BEGIN
select round(sum(a.batch_wt)) into r_stk from dbprod.sm_data a where a.iss_date is null and a.cw_coil_no is not null and a.prod_cd = '37' and a.from_plant != a.hsource;
select round(sum(a.batch_wt)) into vr_stk  from dbprod.psm_data a where a.iss_date is null and a.cw_coil_no is not null and a.prod_cd = 'C9' and a.from_plant != a.hr_source;

OPEN v_hr_stk_out For 
select r_stk, vr_stk from dual

END;

Для C # перейдите по этой ссылке

ОБНОВЛЕНИЕ

<table cellpadding="0" cellspacing="0">
    <tr>
        <th>A</th>
        <th>B/th>
        <th>C</th>        
    </tr>
    @foreach (DataRow row in Model.Tables[0].Rows)
    {
        <tr>
            <td>F</td>
            <td>@row["r_stk"]</td> 
            <td>@row["vr_stk"]</td>                        
        </tr>
    }
</table>
0 голосов
/ 05 июля 2019

Попробуйте добавить эту строку перед завершением тела вашей процедуры

 Select r_stk, vr_stk from dual;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...