【发布时间】:2017-11-06 12:08:11
【问题描述】:
当我在 SMSS 中运行下面的存储过程时,它可以工作并返回一个不错的结果。
SQL:
EXEC @return_value = [dbo].[xxxxxx_EnergiAllTags]
@SegmentResponseID = 'xxxxxxxxxx'
但是当我尝试从我的 C# 代码运行存储过程时,我得到一个错误:
列名“值”无效
这是我的代码:
public DataSet GetQuery(string batchNr)
{
SqlConnection conn = new SqlConnection("xxxxxxxx");
SqlCommand command = new SqlCommand("xxxxxx_EnergiAllTags", conn);
SqlDataAdapter da = new SqlDataAdapter(command);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@SegmentResponseID", batchNr));
DataSet ds1 = new DataSet();
command.CommandTimeout = 60000;
try
{
da.Fill(ds1);
return ds1;
}
catch (Exception e)
{
string ex = e.Message;
throw;
}
}
任何可能有线索的人可以帮助我找出问题所在吗?
****更新为请求*****
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[xxxxxx_EnergiAllTags]
@SegmentResponseID AS VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE #temp (TagName NVARCHAR(MAX),
StartValue NVARCHAR(MAX),
EndValue NVARCHAR(MAX),
Usage NVARCHAR(MAX)
)
INSERT INTO #temp
EXEC [dbo].[xxxxxx_EnergyTagForBatch] @BatchID = @SegmentResponseID,
@TagName = 'T06C02D01E02FQ000.PV'
INSERT INTO #temp
EXEC [dbo].[xxxxxx_EnergyTagForBatch] @BatchID = @SegmentResponseID,
@TagName = 'T06C02D01E02FQ001.PV'
SELECT * From #temp
DROP TABLE #temp
END
【问题讨论】:
-
你能分享
xxxxxx_EnergiAllTags的代码吗?你希望它返回什么输出? -
我认为我们还需要查看存储过程的代码。你有一个名为
Value的专栏吗?如果是这样,请尝试用方括号括起来 -[Value]。 -
Value 是 t-sql 中的关键字,该类型名称使用方括号,例如:[Value]。
-
你确定两者都在同一个数据库中运行吗?
-
能否暂时注释掉 INSERT 并重试?从第一个 INSERT 到 #temp 上的 SELECT 之前的所有代码。这是找出问题出在您的 C#、您向我们展示的过程或调用的过程中的简单方法。
标签: c# sql sql-server stored-procedures sqldataadapter