У меня есть эта хранимая процедура:SQL Server IF..ELSE не отображаются в приложении Windows
exec sp_Defect_B '2013-05-20 00:00:00','2013-05-25 23:59:59'
который имеет IF..ELSE
выполнять разные вещи в зависимости от кода данного:
alter proc [dbo].[p_Defect_B] (@dtFrom datetime, @dtTo datetime)
as
begin
DECLARE @Total TABLE
(
[No] int, TSampel float
)
-- Total
insert into @Total
select 1 as [No], SUM(H.Total) as TSampel from TrxDBHHDr HH
left join TrxDBHdr H on HH.DBNO=H.DBNO
left join ProductType PT on H.ACd=PT.ACd and PT.GCd=1
where HH.Deleted=0 and HH.DBDate between @dtFrom and @dtTo
DECLARE @Defect TABLE
(
DefectCd varchar(15),Name varchar(50), Defect float
)
-- Defect
insert into @Defect
select D.DefectCd,DB.Name,sum(coalesce(D.Qty,0)) as Defect from TrxDBHHDr HH
left join TrxDBDtl D on HH.DBNO=D.DBNO
left join ProductType PT on D.acd=PT.ACd and PT.GCd=1
left join DefectBK DB on DB.DefectCd=D.DefectCd
where HH.Deleted=0 and HH.DBDate between @dtFrom and @dtTo
group by D.DefectCd,DB.Name
DECLARE @SubTotal TABLE
(
Name varchar(50), Defect float, TSampel float, PDefect float
)
insert into @SubTotal
select D.Name,D.Defect,T.TSampel,D.Defect*100/T.TSampel as PDefect from @Defect D
left join @Total T on T.[No]=1
order by PDefect desc
DECLARE @TotalD TABLE
(
[No] int,Defect float
)
insert into @TotalD
select 1, Sum(D.Defect) as Defect from @Defect D
insert into @SubTotal
select 'Total Defect', D.Defect, T.TSampel, D.Defect*100/T.TSampel as PDefect from @TotalD D
left join @Total T on T.[No]=1
select * from @SubTotal
end
I выполнить код в SSMS, и он работал отлично. Но когда я пытаюсь использовать код в приложении C# Windows, он не получает никакого значения ... Как это возможно? Я что-то пропустил?
Только эта хранимая процедура не возвращает значение таблицы ....
Я попытался с помощью временной таблицы, табличных переменного, они до сих пор не вернулись табличное значения ...
Это C# Код:
sql= "exec p_Defect_B '2013-05-20 00:00:00','2013-05-25 23:59:59'";
RunQuery qu_data = new RunQuery();
DataTable data = new DataTable();
data = qu_data.OpenAdoQuery(sql,"IP")
Это часть моей программы моего подключения C# для SQL Server
myCon = new OleDbConnection(strCon);
DataTable myData = new DataTable();
myCon.Open();
OleDbDataAdapter myOleAdapter = new OleDbDataAdapter();
myOleAdapter.SelectCommand = new OleDbCommand(sql,myCon);
myOleAdapter.Fill(myData);
myCon.Close();
- Все таблицы возвращают значение в SMSS.
- Все переменные таблицы отображают результат в SMSS.
- Результат не отображается в приложении C# Windows с использованием ADOAdapter.
- Я попытался использовать Temp Table и Table Variable, не работал.
- Я пробовал не использовать
IF..ELSE
, не работал.
Вы должны избегать использования 'sp_' префикс - это зарезервирован для системных процедур SQL Server. –
Я изменил sp_Defect_B на p_Defect_B и все еще не поймал значение таблицы из процедуры. –
уверен, что есть лучший подход на основе набора? –