存储过程有效,但在c#中给出无效列

时间:2017-11-06 12:08:12

标签: c# sql sql-server stored-procedures sqldataadapter

当我在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;
        }
    }

任何可能有线索的人都可以帮我找出问题所在吗?

****更新为Req *****

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

1 个答案:

答案 0 :(得分:0)

好的,我已经找到了问题所在。

2 SP我有一个名为#temp的临时表,虽然我认为它们应该本地化到每个实例,但它们不是,并且是混合的,到那时他们给出了一个错误。

解决方法,确保在您可能调用的存储过程字符串中没有使用具有相同名称的临时表。