次のコードを含むストアド プロシージャがあり、SQL サーバーで正常に動作します。積み上げ縦棒グラフを操作するには、返された行を使用する必要があります。これらの行を受け取る方法がわかりませんが、ストアド プロシージャ コードの後に指定されたコードを使用してそうしようとしました。誰かが私がどこで間違っているのかを見つけていただければ幸いです。ありがとうございました :)
ストアド プロシージャ コード:
ALTER PROCEDURE [dbo].[weekly]
@id_beleg int /* CONTAINS THE ID OF THE MACHINE FOR WHICH THE NUMBER OF ORDERS IS REQUIRED*/
AS
BEGIN
DECLARE @montag DATETIME
DECLARE @weekend DATETIME
SET @montag = DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0)
/* SET @MONTAG VARIABLE TO THE DATE ON MONDAY OF THE CURRENT WEEK*/
SET @weekend = dateadd(day, 6, @montag)
/* SET @WEEKEND VARIABLE TO THE DATE ON SUNDAY OF THE CURRENT WEEK*/
/* CONTAINS ALL RECORDS OF one PROCESS FOR THE CURRENT WEEK*/
CREATE TABLE #WeeklySieben
(
Tag datetime,
Aufträge_anzahl int,
Anlage varchar(30)
);
INSERT INTO #WeeklySieben (Tag, Aufträge_anzahl, Anlage)
SELECT *
FROM
dbo.Sieben
WHERE
Tag BETWEEN @montag AND GETDATE()
ORDER BY Tag
DECLARE @tempdate datetime
/* CONTAINS ONLY THE UNIQUE MACHINE NAMES*/
CREATE TABLE #Anlage_Sieben
(
Anl varchar(30)
)
/* CONTAINS DATE FOR ALL DAYS OF THE CURRENT WEEK*/
CREATE TABLE #alldays
(
days datetime
)
INSERT INTO #Anlage_Sieben (Anl)
SELECT KURZTEXT as Anl
FROM dbo.tblBELEGUNGSEINHEIT
WHERE ID in (SELECT ID_BELEGUNGSEINHEIT FROM dbo.tblPROZESS_BELEGUNGSEINHEIT WHERE ID_PROZESS = 5)
/* SELECT MACHINE ID WHERE PROCESS IS number 5*/
WHILE @montag <= @weekend
BEGIN
INSERT INTO #alldays (days)
SELECT days = @montag
SET @tempdate= @montag
SET @montag = dateadd(day, 1,@tempdate)
END
/* MACHINE NAME * WEEKDAYS DATE*/
CREATE TABLE #weekdays
(
daydate datetime,
Anlage varchar(30)
)
INSERT INTO #weekdays (daydate, Anlage)
SELECT d.days as daydate
, a.Anl as Anlage
FROM #Anlage_Sieben a
CROSS JOIN #alldays d
/* SELECT NUMBER OF ORDERS ON A PARTICULAR MACHINE FOR ALL WEEK DAYS*/
Select case
when Aufträge_anzahl is null then '0'
else Aufträge_anzahl
end
from #WeeklySieben W right join #weekdays wd on W.Anlage = wd.Anlage and W.Tag = wd.daydate
where wd.Anlage in (select KURZTEXT from dbo.tblBELEGUNGSEINHEIT where ID = @id_beleg )
END
C# コード:
try
{
int a;
string sql = "weekly";
SqlDataAdapter dp = new SqlDataAdapter();
SqlCommand c = null;
SqlDataReader r = null;
DataSet ds = new DataSet();
DataTable dt = new DataTable();
//For creating 'raum' number of stacked column bars
for (int i = 0; i < raum; i++)
{
c = new SqlCommand(sql, conn);
c.CommandType = CommandType.StoredProcedure;
c.Parameters.Add("@raumn", SqlDbType.Int).Value= (int)dblOrders[i];
r = c.ExecuteReader();
dp.SelectCommand = c;
dp.Fill(ds, "Aufträge_anzahl");
dt = ds.Tables["Aufträge_anzahl"];
//For adding points to a stacked column bar
for (int j = 0; j < dt.Rows.Count; j++)
{
a = Convert.ToInt32(dt.Rows[j]);
Chart1.Series[seriesArray[j]].Points.AddY(a);
}
Chart1.DataBind();
dtSr.Clear();
}
}
catch (SqlException ex)
{
Console.WriteLine("SQL Error" + ex.Message.ToString());
}
dblorders は異なるマシンの ID を保持する double 配列で、raum はマシンの総数です。コードはエラーを生成しませんが、チャート内のデータを取得しません。
dbo.ジーベン:
Tag Aufträge_anzahl Anlage
19.07.2013 00:00:00 2 Siebraum 1
20.07.2013 00:00:00 1 Siebraum 4
20.07.2013 00:00:00 3 Siebraum 2
21.07.2013 00:00:00 4 Siebraum 1
22.07.2013 00:00:00 5 Siebraum 5
Tag はその日の日付、Aufträge_anzahl はその日付の注文数、Anlage はマシン