System.ArgumentException: 列 'COLUMN_NAME' 不属于 table
System.ArgumentException: Column 'COLUMN_NAME' does not belong to table
我正在尝试 return SP 结果使用 JSon 方法,就像本教程中的方法 http://prashantjayle.blogspot.com/2015/05/chartjs-with-aspnet-mvc-5.html,但是当我 运行 它时,我需要的图表不显示在视图上。
在我的控制器中,我有这段代码:
public JsonResult GetData()
{
DataTable dtTable = new DataTable();
List<string> lstSales = new List<string>();
List<string> lstProduct = new List<string>();
string strQuery = "SP_SALES_PER_PRODUCT";
SqlConnection con = new SqlConnection (ConfigurationManager.ConnectionStrings["ebms_connection"].ToString());
SqlCommand cmd = new SqlCommand(strQuery, con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dtTable);
foreach(DataRow row in dtTable.Rows)
{
lstSales.Add(row["TOTAL_AMT_PER_ITEM"].ToString());
lstProduct.Add(row["PRODUCT_CODE"].ToString());
}
var BarChart = new
{
SALES = lstSales,
PRODUCTS = lstProduct
};
return Json (BarChart, JsonRequestBehavior.AllowGet);
}
错误指向这行代码:
lstSales.Add(row["TOTAL_AMT_PER_ITEM"].ToString());
TOTAL_AMT_PER ITEM 是我在我的SP 中调用的列。
这是我的 SP 查询
SELECT p.PRODUCT_CODE, SUM(case when p.PRODUCT_ID=od.PRODUCT_ID and od.ORDER_ID=o.ORDER_ID then od.TOTAL_AMT_PER_ITEM else 0 end)
FROM [ORDER] o
INNER JOIN ORDER_DETAILS od
ON o.ORDER_ID = od.ORDER_ID
INNER JOIN PRODUCT p
ON od.PRODUCT_ID=p.PRODUCT_ID
GROUP BY p.PRODUCT_CODE
我做错了什么?希望有人可以帮助我。谢谢!
试试下面的查询
SELECT p.PRODUCT_CODE, SUM(case when p.PRODUCT_ID=od.PRODUCT_ID and od.ORDER_ID=o.ORDER_ID then od.TOTAL_AMT_PER_ITEM else 0 end)
as TOTAL_AMT_PER_ITEM
FROM [ORDER] o
INNER JOIN ORDER_DETAILS od
ON o.ORDER_ID = od.ORDER_ID
INNER JOIN PRODUCT p
ON od.PRODUCT_ID=p.PRODUCT_ID
GROUP BY p.PRODUCT_CODE
您错过了 case 表达式总和的别名,您可以尝试 运行 您的原始查询,并可以查看结果集是否具有您期望确定的列名。
我正在尝试 return SP 结果使用 JSon 方法,就像本教程中的方法 http://prashantjayle.blogspot.com/2015/05/chartjs-with-aspnet-mvc-5.html,但是当我 运行 它时,我需要的图表不显示在视图上。
在我的控制器中,我有这段代码:
public JsonResult GetData()
{
DataTable dtTable = new DataTable();
List<string> lstSales = new List<string>();
List<string> lstProduct = new List<string>();
string strQuery = "SP_SALES_PER_PRODUCT";
SqlConnection con = new SqlConnection (ConfigurationManager.ConnectionStrings["ebms_connection"].ToString());
SqlCommand cmd = new SqlCommand(strQuery, con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dtTable);
foreach(DataRow row in dtTable.Rows)
{
lstSales.Add(row["TOTAL_AMT_PER_ITEM"].ToString());
lstProduct.Add(row["PRODUCT_CODE"].ToString());
}
var BarChart = new
{
SALES = lstSales,
PRODUCTS = lstProduct
};
return Json (BarChart, JsonRequestBehavior.AllowGet);
}
错误指向这行代码:
lstSales.Add(row["TOTAL_AMT_PER_ITEM"].ToString());
TOTAL_AMT_PER ITEM 是我在我的SP 中调用的列。 这是我的 SP 查询
SELECT p.PRODUCT_CODE, SUM(case when p.PRODUCT_ID=od.PRODUCT_ID and od.ORDER_ID=o.ORDER_ID then od.TOTAL_AMT_PER_ITEM else 0 end)
FROM [ORDER] o
INNER JOIN ORDER_DETAILS od
ON o.ORDER_ID = od.ORDER_ID
INNER JOIN PRODUCT p
ON od.PRODUCT_ID=p.PRODUCT_ID
GROUP BY p.PRODUCT_CODE
我做错了什么?希望有人可以帮助我。谢谢!
试试下面的查询
SELECT p.PRODUCT_CODE, SUM(case when p.PRODUCT_ID=od.PRODUCT_ID and od.ORDER_ID=o.ORDER_ID then od.TOTAL_AMT_PER_ITEM else 0 end)
as TOTAL_AMT_PER_ITEM
FROM [ORDER] o
INNER JOIN ORDER_DETAILS od
ON o.ORDER_ID = od.ORDER_ID
INNER JOIN PRODUCT p
ON od.PRODUCT_ID=p.PRODUCT_ID
GROUP BY p.PRODUCT_CODE
您错过了 case 表达式总和的别名,您可以尝试 运行 您的原始查询,并可以查看结果集是否具有您期望确定的列名。