从 TSQL 存储过程检索到 C# 数据表的数据存在偏差

问题描述 投票:0回答:1

当我从 TSQL 存储过程检索数据到 C# 数据表时,我确实遇到了一个奇怪的问题,我真的不明白。我在 TSQL 中得到的结果与检索数据后数据表显示的结果不同。不同的数据是指数据表中的单元格有八个缺失数据或显示不同的数据。这是我在 C# 中使用的代码

public DataTable  GetData()
        {
            string nameOfSp = "sp_SIA_Get_Ratio_Demand_Receipt";

            DataAccess dataAccess = new DataAccess();

            DataTable dt = new DataTable();

            dataAccess.OpenDatabase(DataAccess.ConnectionTo.SQL);

            SqlConnection sqlCon = dataAccess.GetSqlConnection();

            try
            {
                SqlCommand cmd = new SqlCommand(nameOfSp, sqlCon);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandTimeout = 1000;

                cmd.Parameters.Add("@COMPANY", SqlDbType.VarChar).Value = filter.CompanyNo;
                cmd.Parameters.Add("@YEARWEEK_FROM", SqlDbType.VarChar).Value = filter.YearWeekFrom;
                cmd.Parameters.Add("@YEARWEEK_TO", SqlDbType.VarChar).Value = filter.YearWeekTo;
                cmd.Parameters.Add("@USERNAME", SqlDbType.VarChar).Value = filter.UserName;

                SqlDataAdapter da = new SqlDataAdapter(cmd);

                da.Fill(dt);

            }

            catch (Exception ex)
            {
                MessageBox.Show("Could not retrive data from Stored Procedure " + ex.Message);
            }

            dataAccess.CloseDatabase();

            return dt;
        }

这是 SQL 语句。

SELECT  m.MATERIAL_NO, ISNULL(SUM (d.DEMAND_QTY),1) as PST_DEMAND_QTY, ISNULL (SUM (r.RECEIPT_QTY),1) as PST_RECEIPT_QTY, ISNULL(SUM(r.RECEIPT_QTY),1) / ISNULL(SUM(d.DEMAND_QTY),1) AS RATIO
            , SUM(m.INVENTORY_QTY) as INVENTORY_QTY, SUM(m.INVENTORY_VAL) as INVENTORY_VAL, ISNULL(SUM(f.DEMAND_QTY),0) AS FUT_DEMAND_QTY, ISNULL(SUM(f.DEMAND_VAL),0) AS FUT_DEMAND_VAL
            , ISNULL(SUM(m.INVENTORY_QTY) - SUM(f.DEMAND_QTY),0) AS  RMN_INVENTORY_QTY, ISNULL(SUM(m.INVENTORY_VAL) - SUM(f.DEMAND_VAL),0) AS RMN_INVENTORY_VAL
        FROM #MATERIAL m LEFT JOIN #DEMAND d ON m.MATERIAL_NO = d.MATERIAL_NO AND m.STORAGE_LOCATION = d.STORAGE_LOCATION
            LEFT JOIN #RECEIPT r ON m.MATERIAL_NO = r.MATERIAL_NO AND m.STORAGE_LOCATION = r.STORAGE_LOCATION
            LEFT JOIN #DEMAND_FUT f ON m.MATERIAL_NO = f.MATERIAL_NO AND m.STORAGE_LOCATION = f.STORAGE_LOCATION

        GROUP BY m.MATERIAL_NO 

我从SQL得到的结果 enter image description here

我从数据表中得到的结果 enter image description here

我将 C# 中的代码从异步改回,因为我认为这会导致问题。

c# t-sql stored-procedures datatable
1个回答
0
投票

您正在调用一个名为 sp_SIA_Get_Ratio_Demand_Receipt 的存储过程,但您只向我们展示了一条 SQL SELECT 语句。我们需要查看存储过程的其余部分。可能是 WHERE 子句导致了差异。

© www.soinside.com 2019 - 2024. All rights reserved.