2012-11-20 197 views
-2

如何在ASP.net或c#中執行此存儲過程?以及如何傳遞參數@batch日期以便可以基於batch_date操作輸出?執行存儲過程

ALTER PROCEDURE [dbo].[inv_check] @batch_date datetime AS BEGIN 
CREATE TABLE #temp1 
(batch_date datetime,part_no varchar(25),Tot_Tid_Count_Qty int,Number_of_tid int,Updated_DT int) 

INSERT INTO #temp1 
SELECT batch_date,part_no,0,count(tid),0 
FROM dbo.tnx_tid_InvCheck_Details 
where batch_date = @batch_date 
Group by part_no,batch_date 
order by part_no 

UPDATE #temp1 
SET Updated_DT = isnull(d.Updated_DT,0) 
--select i.part_no,i.Number_of_tid, isnull(d.Updated_DT,0) 
FROM #temp1 p 
LEFT OUTER JOIN 
    (SELECT part_no,COUNT(LastUpdate_DT)as Updated_DT 
    FROM dbo.tnx_tid_InvCheck_Details 
    Where NOT LastUpdate_DT IS NULL and batch_date = @batch_date 
    Group by part_no,batch_date) d on p.part_no=d.part_no 


DECLARE @sql int 
DECLARE @sql1 int 

SELECT @sql1 = count(part_no) 
FROM #temp1 

SELECT @sql = count(part_no) 
FROM #temp1 
WHERE number_of_tid= Updated_DT 


DELETE #temp1 



CREATE TABLE #temp2 
(batch_date datetime,part_no varchar(25),kb02_qty int,sum_count_qty int,variance int) 

INSERT INTO #temp2 
SELECT batch_date,part_no,kb02_qty,0,0 
FROM dbo.tnx_tid_InvCheck_Master 
where NOT kb02_qty IS NULL AND batch_date = @batch_date 
ORDER BY part_no 



UPDATE #temp2 
SET sum_count_qty = isnull (q.sum_count_qty,0) 
--select i.part_no,i.Number_of_tid, isnull(d.Updated_DT,0) 
FROM #temp2 t 
LEFT OUTER JOIN 
    (SELECT part_no,sum(count_qty) as sum_count_qty 
    FROM dbo.tnx_tid_InvCheck_Details 
    Where NOT LastUpdate_DT IS NULL AND batch_date = @batch_date 
    Group by part_no) q on t.part_no= q.part_no 

UPDATE #temp2 
SET variance=(kb02_qty - sum_count_qty) 

DECLARE @parts_having_variance int   
DECLARE @negative_variance_qty int 
DECLARE @Negative_Variance_Parts int 
DECLARE @Positive_Variance_Qty int 
DECLARE @Positive_Variance_Parts int 

SELECT @parts_having_variance = COUNT(part_no) 
FROM #temp2 
WHERE NOT variance = 0 

SELECT @negative_variance_qty = sum(variance) 
FROM #temp2 
Where variance < 0 

SELECT @Negative_Variance_Parts = COUNT(variance) 
FROM #temp2 
Where variance < 0 

SELECT @Positive_Variance_Qty = sum(variance) 
FROM #temp2 
Where variance > 0 

SELECT @Positive_Variance_Parts = COUNT(variance) 
FROM #temp2 
Where variance > 0 

INSERT INTO #temp1 
SELECT batch_date,part_no,0,COUNT(tid)as Number_of_tid,0 
FROM dbo.tnx_tid_InvCheck_Details 
WHERE batch_date = @batch_date 
Group by part_no,batch_date 
order by part_no 

UPDATE #temp1 
SET Updated_DT = isnull(d.Updated_DT,0) 
FROM #temp1 p 
LEFT OUTER JOIN 
    (SELECT part_no,COUNT(LastUpdate_DT)as Updated_DT 
    FROM dbo.tnx_tid_InvCheck_Details 
    Where NOT LastUpdate_DT IS NULL AND batch_date = @batch_date 
    Group by part_no,batch_date) d on p.part_no=d.part_no 

    DECLARE @tid_count int 

    SELECT @tid_count=SUM(Number_of_tid) 
    FROM #temp1 
    WHERE Number_of_tid = Updated_DT 

UPDATE #temp1 
SET Tot_Tid_Count_Qty = (e.Tot_Tid_Count_Qty) 
FROM #temp1 p 
LEFT OUTER JOIN 
(SELECT part_no,SUM(count_qty)AS Tot_Tid_Count_Qty 
    FROM dbo.tnx_tid_InvCheck_Details 
    WHERE batch_date = @batch_date 
    Group by part_no,batch_date) e on p.part_no=e.part_no 

    DECLARE @tid_count_qty int 

    SELECT @tid_count_qty = SUM(Tot_Tid_Count_Qty) 
    FROM #temp1 
    WHERE Number_of_tid = Updated_DT 



SELECT ' Parts Counted ' AS CRITERIA , LTRIM(RTRIM(CONVERT(CHAR,@sql))) + '/' + LTRIM(RTRIM(CONVERT(CHAR,@sql1))) AS QTY 
UNION 
SELECT ' Parts Having Variance ' AS CRITERIA ,LTRIM(RTRIM(CONVERT(CHAR,@parts_having_variance))) AS QTY 
UNION 
SELECT ' Total tid Count ' AS CRITERIA ,LTRIM(RTRIM(CONVERT(CHAR,@tid_count))) AS QTY 
UNION 
SELECT ' Total tid Count Qty ',LTRIM(RTRIM(CONVERT(CHAR,@tid_count_qty))) AS QTY 
UNION 
SELECT ' Total Negative Variance Qty ' AS CRITERIA ,LTRIM(RTRIM(CONVERT(CHAR,@negative_variance_qty))) AS QTY 
UNION 
SELECT ' Negative Variance Parts ' AS CRITERIA ,LTRIM(RTRIM(CONVERT(CHAR,@Negative_Variance_Parts))) AS QTY 
UNION 
SELECT ' Total Positive Variance Qty ' AS CRITERIA ,LTRIM(RTRIM(CONVERT(CHAR,@Positive_Variance_Qty))) AS QTY 
UNION 
SELECT ' Positive Variance Parts ' AS CRITERIA ,LTRIM(RTRIM(CONVERT(CHAR,@Positive_Variance_Parts))) AS QTY 


Drop table #temp1 
Drop table #temp2 

END 

我想這ASP.net代碼...它不工作..... u人可以幫助我解決這個code..tq ...

 using System; 
     using System.Collections.Generic; 
     using System.Linq; 
     using System.Web; 
     using System.Web.UI; 
     using System.Web.UI.WebControls; 
     using System.Data; 
     using System.Data.SqlClient; 

     namespace new1 
     { 
      public partial class _Default : System.Web.UI.Page 
     { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string str = "Data Source = kmsiis010;Initial Catalog =db_IntelliMat;Integrated Security=True"; 
     SqlConnection conn = new SqlConnection(str); 
     SqlCommand cmd = new SqlCommand("inv_check", conn); 
     SqlDataAdapter da = new SqlDataAdapter(); 
     da.SelectCommand = cmd; 
     DataSet ds = new DataSet(); 
     da.Fill(ds, "dbo.tnx_tid_InvCheck_Details"); 
     this.GridView1.DataSource = ds; 
     this.GridView1.DataBlind(); 
     } 
     } 
     } 

回答

3

這是執行存儲過程的基本代碼。

try 
{ 
    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 

    using(SqlCommand command = new SqlCommand("inv_check", connection)) 
    { 
     command.CommandType = CommandType.StoredProcedure; 
     command.Parameters.Add("@batch_date", SqlDbType.DateTime).Value = DateTime.Now; // or the variable which holds datetime 
     connection.Open(); 
     return command.ExecuteNonQuery(); 
    } 
    } 
} 
catch (SqlException ex) 
{ 
    Response.Write("SQL Error" + ex.Message.ToString()); 
} 
+1

你也應該把你的'SqlCommand'成'使用()......'塊... –

+1

@marc_s:謝謝你的提示。現在修改代碼。 –

+1

另一個提示:儘可能晚地打開連接** - 當你在你的'SqlCommand'上進行設置工作時,連接不需要打開....在**之前打開它**調用'.ExecuteNonQuery()'(並且在調用之後立即關閉它!) –