[英]SQL Server - 'Invalid column name' exception only when executing stored procedure through ADO.NET
正如标题所说,我正在尝试使用 C# 执行存储过程,但总是出现错误
列名无效
问题是,如果我使用相同的参数直接在 SQL Server Management Studio 中执行它,它就可以正常运行并得到预期的结果。
异常表示错误在我的程序的这些特定行上:
UPDATE #TBL_FINAL_RESULT
SET INDICATOR = Y.INDICATOR
FROM #TBL_FINAL_RESULT X
INNER JOIN (
SELECT
Z.Code,
CASE
WHEN Z.M_MonthlyDeviation < 0
THEN (
CASE
WHEN Z.M_MonthlyDeviation < Z.HighReference THEN '8'
WHEN Z.M_MonthlyDeviation > Z.LowReference THEN '9'
ELSE '6'
END
)
ELSE
'9'
END AS Indicator
FROM (
SELECT
A.Code,
A.M_MonthlyReal,
A.M_MonthlyDeviation,
-1 * (A.M_MonthlyReal * 5 /100) as HighReference,
-1 * (A.M_MonthlyReal / 100) as LowReference
FROM #TBL_FINAL_RESULT A
WHERE A.NivelGRD > 1
) Z
)Y ON X.CODE = Y.CODE
这是我执行存储过程的 C# 函数:
public DataTable ExecuteStoredProcedure_Query(string storedProcedure, List<SqlParameter> parametros = null)
{
DataTable table = new DataTable();
using (var conn = Connection)
{
using (var cmd = new SqlCommand(storedProcedure, Connection))
{
cmd.CommandType = CommandType.StoredProcedure;
if(parametros != null && parametros.Count > 0)
{
foreach (var param in parametros)
{
cmd.Parameters.Add(param);
}
}
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
try
{
conn.Open();
adapter.Fill(table);
}
catch (Exception ex)
{
throw ex;
}
}
}
return table;
}
它抛出以下异常:
无效的列名“NivelGRD”
无效的列名“代码”
无效的列名“M_MonthlyReal”
无效的列名“M_MonthlyDeviation”
无效的列名“M_MonthlyReal”
无效的列名“M_MonthlyReal”
无效的列名“CODE”
我完全确定这些列存在于临时表中。 它们用于程序的其他部分,并且它们工作正常,直到那时。
你认为有什么问题?
运行时的#TBL_FINAL_RESULT
可能不是您认为的临时表。 如果在顶级批处理中或在堆栈中更高的存储过程中创建了具有该名称的临时表,它将在存储过程中可见。 它可能有不同的列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.