首页 > 解决方案 > 如何调用需要复杂类型作为参数之一的存储 SQL 过程?

问题描述

我在数据库中存储了我尝试从 C# 调用的过程。它看起来像这样:

        using (var connection = new SqlConnection(connectionString))
        {
            connection.Open();
            try
            {
                SqlCommand cmd = new SqlCommand("dbo.NameOfMyProcedure", connection);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;

                SqlParameter firstParam = new SqlParameter("@FirstParam", new
                {
                    Message_ID = message.MessageId,
                    Created = createdTime,
                    Type = 0,
                    ...
                });
                SqlParameter secondParam = new SqlParameter("@SecondParam", null);

                cmd.Parameters.AddRange(new SqlParameter[] { firstParam, secondParam });
                cmd.ExecuteNonQuery();
            }
            finally
            {
                connection.Close();
            }

该过程需要两个参数,一个可以为空的 varchar ( ) 和在 DB ( ) 中定义的@SecondParam复杂类型 ( )。@FirstParamProgrammability -> Types -> User-Defined Table Types

我试图完全匹配 DB 中的类型并创建匿名类型,希望它将我的类型转换为 DB 类型并且一切正常。然而,这并没有奏效。我得到 ArgumentException: No mapping exists from object type (...) to a known managed provider native type。如何在不必使用 EF 并将所有这些类型生成到 C# 类中的情况下将复杂类型传递给 DB 过程?

标签: c#stored-procedures

解决方案


推荐阅读