gpt4 book ai didi

c# - 如何在 C# 中从具有多个返回值的存储过程中获取剩余输出

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:00 25 4
gpt4 key购买 nike

我正在从我的桌面应用程序调用一个存储过程,该存储过程返回多个结果。

但是当我将结果存储到数据表中时,只有第一个结果被填充。
谁能帮我解决这个问题。

我使用的存储过程是:

ALTER PROCEDURE [dbo].[InsertIntoUserLogsAndImageArchive]
@UserName NVARCHAR(50),
@CompUserName NVARCHAR(50),
@CompName NVARCHAR(50),
@DateTime NVARCHAR(50),
@EAN NVARCHAR(50),
@Path NVARCHAR(50),
@FileName NVARCHAR(50),
@BatchId NVARCHAR(50)
AS
BEGIN
DECLARE @ULId NVARCHAR(50), @AId NVARCHAR(50)

INSERT INTO [UserLogs] (UserName, CompUserName, CompName, DateTime) OUTPUT INSERTED.ULId --into @ULId
VALUES (@UserName, @CompUserName, @CompName, @DateTime);

SELECT @ULId = SCOPE_IDENTITY();

INSERT INTO [ImagesArchive] (EAN, Path, FileName, BatchId, ULId)
OUTPUT INSERTED.AId
VALUES (@EAN, @Path, @FileName, @BatchId, @ULId);

SELECT @AId = SCOPE_IDENTITY();

SELECT ULId, AId
FROM ImagesArchive
WHERE AId = @AId;
END

接收数据的代码片段是:

public DataTable ExecuteQuery2(string storedProcedureName, List<SqlParameter> param)
{
DataTable dt = new DataTable();

using (SqlConnection cn = GetConnection(""))
{
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = storedProcedureName;
cmd.Parameters.AddRange(param.ToArray());

using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
}
}
}
return dt;
}

执行存储过程返回如下:

Image of output

我想在我的 DataTable 中获取最后一个结果而不是第一个结果。虽然我还有其他选择,但我真的很想接受这个。

请帮忙!

最佳答案

您可以使用dataset 代替datatable。所以你在 c# 中更新的代码将是

public DataSet ExecuteQuery2(string storedProcedureName, List<SqlParameter> param)
{
DataSet ds = new DataSet();
using (SqlConnection cn = GetConnection(""))
{
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = storedProcedureName;
cmd.Parameters.AddRange(param.ToArray());

using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(ds);
}
}
}
return ds;
}

通过这种方式,您可以返回从您的程序返回的所有记录。

或者

如果你想发送特定的DataTable,那么你可以这样更新。

public DataTable ExecuteQuery2(string storedProcedureName, List<SqlParameter> param)
{
DataSet ds = new DataSet();

using (SqlConnection cn = GetConnection(""))
{
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = storedProcedureName;
cmd.Parameters.AddRange(param.ToArray());

using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(ds);
}
}
}

return ds.Tables[0]; //// here instead of 0 you may pass the table number you want to return
}

关于c# - 如何在 C# 中从具有多个返回值的存储过程中获取剩余输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57362595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com