从 C# 调用带有自定义类型参数的存储过程?

Alw*_*wyn 5 c# sql sql-server orm stored-procedures

我有一个自定义类型的程序,如下所示:

CREATE PROCEDURE MyProc
    @Arg1 CustomArgType readonly
AS
BEGIN
.
.
.
END
Run Code Online (Sandbox Code Playgroud)

自定义类型是:

CREATE TYPE dbo.CustomArgType as TABLE
(
    SomeInt int not null
)
Run Code Online (Sandbox Code Playgroud)

如何在c#中调用上面的存储过程?

可以使用什么样的适配器?像 EF 这样的 ORM 可以使用这样的存储过程吗?

Szy*_*mon 0

为了测试这一点,我扩展了您的存储过程以使其返回参数表的第一行:

CREATE PROCEDURE MyProc
    @Arg1 CustomArgType readonly
AS
BEGIN
    select top 1 SomeInt from @Arg1
END
Run Code Online (Sandbox Code Playgroud)

现在我可以在 C# 中使用以下代码来执行存储过程:

using (var conn = new SqlConnection("Data Source=localhost;Initial Catalog=temp;User ID=sa"))
{
    conn.Open();

    DataTable dt = new DataTable();
    dt.Columns.Add("SomeInt", typeof(Int32));

    dt.Rows.Add(new Object[] { 3 });

    var command = conn.CreateCommand();
    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = "MyProc";
    command.Parameters.Add(new SqlParameter("@Arg1", dt));
    object returnValue = command.ExecuteScalar();

}
Run Code Online (Sandbox Code Playgroud)

returnValue是我期望的 3(我插入到参数表的第一行)。

不幸的是,我对 EF 了解不多,所以我不能说你是否可以做同样的事情。