当我从 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
我将 C# 中的代码从异步改回,因为我认为这会导致问题。
您正在调用一个名为 sp_SIA_Get_Ratio_Demand_Receipt 的存储过程,但您只向我们展示了一条 SQL SELECT 语句。我们需要查看存储过程的其余部分。可能是 WHERE 子句导致了差异。