Выполнить несколько запросов SQL Informix в ASP.NETC#

Место общения программистов C#
Ответить
Anonymous
 Выполнить несколько запросов SQL Informix в ASP.NET

Сообщение Anonymous »

Я пытаюсь выполнить несколько запросов Informix SQL в ASP.NET.
Когда я выполняю эти 4 запроса с или без полуколон, я получил синтаксисную ошибку, подобную этой: < /p>

ERROR [42000] [Informix][Informix ODBC Driver][Informix]A syntax error has occurred.
< /code>

Можно ли выполнить 4 запроса один за другим в отдельных командах ODBCCommand, поскольку я использую временные таблицы для моей окончательной команды SQL или всего в одной команде? public SumarneDjelatnosti GetEPonudeDjelatnostiSumarnoList(String appid, String oper, Int16 godina)
{
//METODA
// TODO: unit test GetEPonudeDjelatnostiSumarnoList

SvcActContext sac = null;

sac = InitCtx("GetEPonudeDjelatnostiSumarnoList");

if (appid == null) { appid = ""; }

oper = OperAlter(appid, sac, oper);

SumarneDjelatnosti popis = new SumarneDjelatnosti();

if (!SvcAccessAuth.AccessGranted(appid, sac))
{
popis.Odgovor = "Neovlašten pristup.";

popis.OdgovorStatus = -100;

LogSvcEvent(appid, sac, "UnauthorizedUse", oper, null, popis.OdgovorStatus.ToString(), popis.Odgovor, 200);

return popis;
}

String dsnc = AppGlobals.DSNd;

String opmbo = oper.Trim();
String ust;

EPonudaOperToken tok = new EPonudaOperToken();

tok = _GetEPonudaSekOperOvl(appid, sac, oper);

if (tok.OdgovorStatus < 0)
{
popis.Odgovor = tok.Odgovor;
popis.OdgovorStatus = tok.OdgovorStatus;

LogSvcEvent(appid, sac, "Error", oper, null, String.Format("GetEPonudaSekOperOvl: {0}, {1}", popis.OdgovorStatus, popis.Odgovor), null, 200);

return popis;
}
ust = tok.DavzuSif;

LogSvcEvent(appid, sac, "Begin", opmbo, null, dsnc, null, 50);

using (OdbcConnection ocn = new OdbcConnection(AppGlobals.OdbcCString(true)))
{
try
{
ocn.Open();
}
catch (Exception ex)
{
popis.Odgovor = "Pristup bazi podataka nije moguć.";

popis.OdgovorStatus = -101;

LogSvcEvent(appid, sac, "DbAccessError", opmbo, null, popis.OdgovorStatus.ToString(), ex.Message, 200);

return popis;
}

using (OdbcCommand dbcmd = ocn.CreateCommand())
{
String first = "";
#if DEBUG
first = " first 25 ";
#endif
String sql = @"
select " + first + @" p.id, dj.sifra djsifra, dj.naziv djnaziv,
sum((case
when r.krevet is null then r.brkrevk
when r.brkrevk is null then r.krevet
else r.krevet+r.brkrevk
end)) br_kreveta,
sum(r.mjesta) mjesta_bolnice,
sum(r.postup) br_postupaka, sum(r.sala) br_sala,
round(sum(
(case
when dj.sifra like '%1' then 1
else r.sati/40
end)
),2) ordinacija
FROM eponudesb p
right join radiliste r on r.eponudesb_id = p.id
right join djelzz dj on dj.id = r.djelzz_id
where r.godina=2018
and p.davzu_sif='004200420'
group by p.id, dj.sifra, dj.naziv
order by dj.sifra
into temp djelatnost_izv_temp;

select " + first + @"djsifra, djnaziv, round(sum(ordinacija),2)
suma_ordinacija from djelatnost_izv_temp
group by 1,2 into temp djelatnost_izv_sum_temp;

update djelatnost_izv_temp set
ordinacija=(select suma_ordinacija
from djelatnost_izv_sum_temp
where djelatnost_izv_sum_temp.djsifra=djelatnost_izv_temp.djsifra );

select " + first + @"dj.sifra djsifra, dj.naziv djnaziv,
trim (g.sifra) ||'-'|| trim(s.sifspr) sprema,
round(sum(t.sati/40),2) sati_spreme
FROM eponudesb p
left join radiliste r on r.eponudesb_id = p.id
left join djelzz dj on dj.id = r.djelzz_id
left join timrad t on t.radiliste_id=r.id
left join djelponude dp on dp.id=t.djelponude_id
left join strspr s on s.id=dp.strspr_id
left join zdrdje z on z.id=dp.zdrdje_id
left join tipzdpon ti on ti.id=dp.tipzdpon_id
left join grtippon g on ti.grtippon_id=g.id
where r.godina=2018
and p.davzu_sif='004200420'
group by dj.sifra, dj.naziv, s.sifspr, g.sifra
order by dj.sifra, sprema
into temp struc_sprem_izv_temp;

select " + first + @"d.djsifra djsifra, d.djnaziv djnaziv,
d.br_kreveta br_kreveta,
d.mjesta_bolnice mjesta_bolnice,
d.br_postupaka br_postupaka,
d.br_sala br_sala, d.ordinacija ordinacija,
s.sprema naziv_sprema, s. sati_spreme sati_spreme
from struc_sprem_izv_temp s
left join djelatnost_izv_temp d on d.djsifra=s.djsifra;
";

dbcmd.CommandText = sql;
//dbcmd.Parameters.Add("@godina", OdbcType.Int).Value = godina;
//dbcmd.Parameters.Add("@davzu_sif", OdbcType.VarChar).Value = ust;

try
{
using (OdbcDataReader dbReader = dbcmd.ExecuteReader())
{
List itl = new List();

while (dbReader.Read())
{
DjelatnostiSumarnoIzv pspi = new DjelatnostiSumarnoIzv();

pspi.SifraDjelatnosti = DBHelper.GetOdbcString(dbReader, "djsifra", "", true, false);
pspi.NazivDjelatnosti = DBHelper.GetOdbcString(dbReader, "djnaziv", "", true, false);
pspi.BrojKreveta = DBHelper.GetOdbcNum(dbReader, "br_kreveta", (double)0);
pspi.BrojMjestaDnevneBolnice = DBHelper.GetOdbcNum(dbReader, "mjesta_bolnice", (double)0);
pspi.BrojPostupakaHemodijalize = DBHelper.GetOdbcNum(dbReader, "br_postupaka", (double)0);
pspi.BrojOperacijskihSala = DBHelper.GetOdbcNum(dbReader, "br_sala", (double)0);
pspi.BrojOrdinacija = DBHelper.GetOdbcNum(dbReader, "ordinacija", (double)0);
pspi.NazivStrucneSpreme = DBHelper.GetOdbcString(dbReader, "naziv_sprema", "", true, false);
pspi.SatiStrucneSpreme = DBHelper.GetOdbcNum(dbReader, "sati_spreme", (double)0);

itl.Add(pspi);

}

if (itl.Count > 0)
{
popis.Lista = itl.ToArray();
popis.OdgovorStatus = popis.Lista.Length;
}
else
{
popis.Odgovor = "";

popis.OdgovorStatus = 0;

LogSvcEvent(appid, sac, "NoRows", opmbo, null, popis.OdgovorStatus.ToString(), popis.Odgovor, 150);

return popis;
}
}
}
catch (Exception ex)
{
popis.Odgovor = "Podatke nije moguće učitati.";

popis.OdgovorStatus = -102;

LogSvcEvent(appid, sac, "DataReadError", opmbo, null, popis.OdgovorStatus.ToString(), ex.Message, 200);

return popis;
}
}

LogSvcEvent(appid, sac, "Success", opmbo, null, dsnc, null, 100);

return popis;
}

}
< /code>

Редактировать: когда я выполняю эти команды SQL в сценарии DBEAVER, запущенных без ошибок. Можно ли переписать запросы в одном запросе?

Подробнее здесь: https://stackoverflow.com/questions/537 ... in-asp-net
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»