【发布时间】:2020-06-26 13:57:10
【问题描述】:
我大多是 C# 新手,所以我在这里寻找一些指导。我正在测试一种方法,我需要将一个 guid 列表传递给并运行一个存储过程,该过程根据我传递给它的 guid 返回值,然后我可以打印到控制台。当我只传递一个 guid 时,我可以让该方法工作,但是当我传递一个 guid 列表时,它似乎不起作用。
我觉得我对如何传递 guid 列表并返回它缺乏一些了解。我在尝试返回 List 时遇到转换错误。
这是我已经走了多远,但我觉得我现在被卡住了,无法从我在网上找到的任何信息中取得进展。
class Program
{
static void Main(string[] args)
{
List<Guid> tempguid = new List<Guid>();
tempguid.Add(Guid.Parse("472USFA0-B705-9A73-ABD4-3B1870AF1409"));
tempguid.Add(Guid.Parse("FA97E6BB-0875-5UB9-967A-87ECC396F9F0"));
GetValue(tempguid);
Console.WriteLine(GetValue);
}
public void GetValue(List<Guid> tempguid)
{
using (SqlConnection conn = new SqlConnection("connection string here"))
{
conn.Open();
SqlCommand cmd = new SqlCommand("stored procedure here", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@id", tempguid));
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
Console.WriteLine((string)rdr["value"]);
}
Console.ReadLine();
}
}
}
}
我应该像 GetValue(List tempguid) 这样传递列表吗?
编辑
好吧,如果我使用 TVP。
类似:
CREATE TYPE [dbo].[Identity] AS TABLE(
[Id] [uniqueidentifier] NOT NULL
)
GO
然后我的程序将类似于以下内容:
CREATE OR ALTER PROCEDURE [dbo].[procedure_name]
@id dbo.Identity READONLY
as
SELECT t.[id]
,t.[value]
FROM [dbo].[table1] t
Inner Join @id i on i.Id = t.id
如何在 c# 中将此 TVP 用于我的存储过程?
【问题讨论】:
-
一种方法是使用 TVP - docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/… 将多个值传递给存储过程。这里有一个例子 - stackoverflow.com/questions/62301581/…
-
存储过程是什么样的(不是过程本身(如果它很复杂),主要是 CREATE 和参数部分)。正如@mahesh_b 所指出的,您可能希望传递一个表值参数。
-
@Flydog57 存储过程中唯一的参数是id
-
而且,ID 被键入为 ... ?
-
嘿,@Flydog57 我刚刚使用 TVP 对我的问题进行了编辑。然后我如何使用它来传递 c# 中的 guid 列表?
标签: c# sql sql-server stored-procedures