{"id":942,"date":"2023-03-30T08:01:17","date_gmt":"2023-03-30T06:01:17","guid":{"rendered":"https:\/\/sii.ua\/blog\/using-table-valued-parameters-with-dapper-in-net\/"},"modified":"2024-02-16T09:33:34","modified_gmt":"2024-02-16T08:33:34","slug":"vykorystannya-parametriv-z-tablychnym-znachennyam-z-dapper-v-net","status":"publish","type":"post","link":"https:\/\/sii.ua\/blog\/vykorystannya-parametriv-z-tablychnym-znachennyam-z-dapper-v-net\/","title":{"rendered":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0456\u0432 \u0437 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0437 Dapper \u0432 .NET"},"content":{"rendered":"\n<p>\u042f\u043a\u0449\u043e \u0432\u0438 \u043f\u0440\u0430\u0446\u044e\u0454\u0442\u0435 \u0437 SQL Server \u0430\u0431\u043e Azure SQL, \u0432\u0438 \u043d\u0430\u043f\u0435\u0432\u043d\u043e \u0447\u0443\u043b\u0438 \u043f\u0440\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0437 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c. \u042f\u043a\u0449\u043e \u0436 \u0432\u0438 \u2013 \u0431\u0435\u043a\u0435\u043d\u0434-\u0440\u043e\u0437\u0440\u043e\u0431\u043d\u0438\u043a, \u0432\u0438, \u0431\u0435\u0437\u0443\u043c\u043e\u0432\u043d\u043e, \u0431\u0443\u0434\u0435\u0442\u0435 \u0440\u0430\u0434\u0456 \u0434\u0456\u0437\u043d\u0430\u0442\u0438\u0441\u044f, \u044f\u043a \u043b\u0435\u0433\u043a\u043e \u043c\u0438 \u043c\u043e\u0436\u0435\u043c\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0457\u0445 \u0443 \u043d\u0430\u0448\u043e\u043c\u0443 \u0434\u043e\u0434\u0430\u0442\u043a\u0443 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e Dapper.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0437 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c<\/strong>\u00a0<\/h2>\n\n\n\n<p>TVP \u2013 \u043e\u0434\u043d\u0430 \u0437 \u043d\u0430\u0439\u043a\u043e\u0440\u0438\u0441\u043d\u0456\u0448\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0456\u0439 SQL Server. \u0412\u043e\u043d\u0430 <a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/framework\/data\/adonet\/sql\/table-valued-parameters\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >\u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u0438 \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0440\u044f\u0434\u043a\u0456\u0432 \u0434\u0430\u043d\u0438\u0445 \u0437 \u043a\u043b\u0456\u0454\u043d\u0442\u0441\u044c\u043a\u043e\u0457 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0438 \u0432 SQL Server<\/a>. \u0426\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0454, \u0449\u043e \u043c\u0438 \u043c\u043e\u0436\u0435\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0438 \u0432\u0441\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u044e \u0432 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0430\u0431\u043e \u0444\u0443\u043d\u043a\u0446\u0456\u044e \u043e\u0434\u043d\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0449\u043e\u0431 \u0432\u0438\u043a\u043e\u043d\u0430\u0442\u0438 \u0431\u0443\u0434\u044c-\u044f\u043a\u0443 \u0434\u0456\u044e, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u043f\u043e\u0447\u0430\u0442\u0438 \u0437\u0456 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u0442\u0438\u043f\u0443 \u0432 \u0431\u0430\u0437\u0456 \u0434\u0430\u043d\u0438\u0445.\u00a0<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nCREATE TYPE &#x5B;dbo].&#x5B;udtt_Project] AS TABLE\n(\n\t&#x5B;Id] int NULL,\n\t&#x5B;Name] nvarchar(4000) NOT NULL,\n\t&#x5B;ProjectStartDate] DateTimeOffset NULL,\n\t&#x5B;Active] bit NOT NULL, \n\t&#x5B;Draft] bit NOT NULL\n)\n<\/pre><\/div>\n\n\n<p>\u041f\u0456\u0441\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u043a\u0440\u043e\u043a\u0443 \u043c\u0438 \u043c\u043e\u0436\u0435\u043c\u043e \u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0417\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u044f\u043a\u0430 \u043f\u0440\u0438\u0439\u043c\u0435 \u043d\u0430\u0448 \u0412\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0435\u043c \u0442\u0438\u043f \u0442\u0430\u0431\u043b\u0438\u0446\u0456 \u044f\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nCREATE PROCEDURE &#x5B;dbo].&#x5B;ProcedureWhichAcceptsProjectsAsTVP]\n\t@projects &#x5B;dbo].&#x5B;udtt_Project] readonly\nAS\nBEGIN\n\tSELECT count(*)\n\tfrom @projects;\nEND\n<\/pre><\/div>\n\n\n<p>\u0426\u0435 \u0432\u0441\u0435, \u0449\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0440\u043e\u0431\u0438\u0442\u0438 \u0432 \u0431\u0430\u0437\u0456 \u0434\u0430\u043d\u0438\u0445. \u0410\u043b\u0435 \u043f\u0435\u0440\u0448 \u043d\u0456\u0436 \u043c\u0438 \u0437\u043c\u043e\u0436\u0435\u043c\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043d\u0430\u0448\u0443 \u0417\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u043d\u0430\u0432\u0447\u0438\u0442\u0438\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u0438 \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0437 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e Dapper&#8230;\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 \u0437 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e Dapper<\/strong>\u00a0<\/h2>\n\n\n\n<p>\u0429\u043e\u0431 \u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0437 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c, \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u0442\u0438 \u043c\u0435\u0442\u043e\u0434 <em>AsTableValuedParameter<\/em>. \u0426\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u044e\u0454 <em>DataTable <\/em>\u0430\u0431\u043e <em>IEnumerable&lt;T&gt;, \u0434\u0435 T : IDataRecord, <\/em>\u0432 <em>ICustomQueryParameter<\/em>. \u041c\u0438 \u0437\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043c\u043e\u0441\u044f \u043d\u0430 <em>DataTable, <\/em>\u0442\u043e\u043c\u0443 \u0449\u043e \u044f \u0432\u0432\u0430\u0436\u0430\u044e, \u0449\u043e \u0439\u043e\u0433\u043e \u0431\u0443\u0434\u0435 \u043b\u0435\u0433\u0448\u0435 \u0437\u0440\u043e\u0437\u0443\u043c\u0456\u0442\u0438.&nbsp;<\/p>\n\n\n\n<p>\u041c\u0438 \u044f\u043a \u0440\u043e\u0437\u0440\u043e\u0431\u043d\u0438\u043a\u0438 \u0437\u0430\u0437\u0432\u0438\u0447\u0430\u0439 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u043c\u043e \u043d\u0435 \u0446\u0456 \u0442\u0438\u043f\u0438, \u0430 \u0441\u043a\u043e\u0440\u0456\u0448\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u043f\u0435\u0432\u043d\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u0429\u043e\u0431 \u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0438 TVP, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u043f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u043d\u0430\u0448 \u0441\u043f\u0438\u0441\u043e\u043a \u0432 DataTable \u0456 \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u0442\u0438 <em>AsTableValuedParameter<\/em>. \u041f\u0440\u0438\u043f\u0443\u0441\u0442\u0438\u043c\u043e, \u0449\u043e \u0443 \u043d\u0430\u0441 \u0454 \u043c\u043e\u0434\u0435\u043b\u044c C#, \u044f\u043a\u0430 \u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0454 \u043d\u0430\u0448 \u0412\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0435\u043c \u0442\u0438\u043f \u0442\u0430\u0431\u043b\u0438\u0446\u0456 SQL, \u0449\u043e \u0432\u0438\u0433\u043b\u044f\u0434\u0430\u0454 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u043c \u0447\u0438\u043d\u043e\u043c:&nbsp;<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic class Project\n{\n    public int? Id { get; set; }\n    public string Name { get; set; } = String.Empty;\n    public DateTimeOffset? ProjectStartDate { get; set; }\n    public bool Active { get; set; }\n    public bool Draft { get; set; }\n}\n<\/pre><\/div>\n\n\n<p>\u041f\u0435\u0440\u0448\u0435, \u0449\u043e \u0441\u043f\u0430\u0434\u0430\u0454 \u043d\u0430\u043c \u043d\u0430 \u0434\u0443\u043c\u043a\u0443, \u0446\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0438 <em>DataTable<\/em>, \u0432\u0440\u0443\u0447\u043d\u0443 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0456 \u0441\u0442\u043e\u0432\u043f\u0446\u0456 \u0442\u0430 \u0437\u0430\u043f\u043e\u0432\u043d\u0438\u0442\u0438 \u0457\u0445 \u0434\u0430\u043d\u0438\u043c\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u043c \u0447\u0438\u043d\u043e\u043c:\u00a0<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nusing var conn = new SqlConnection(connectionString);\nconn.Open();\n\n\/\/ some example data\nList&lt;Project&gt; projects = new()\n{\n    new Project { Id = 1, Name = &quot;Name1&quot;, ProjectStartDate = DateTimeOffset.Parse(&quot;2022-11-01&quot;), Active = true, Draft = false },\n    new Project { Id = 2, Name = &quot;Name2&quot;, ProjectStartDate = DateTimeOffset.Parse(&quot;2022-12-01&quot;), Active = false, Draft = true }\n};\n\n\/\/ create DataTable\nDataTable projectsDT = new();\nprojectsDT.Columns.Add(nameof(Project.Id), typeof(int));\nprojectsDT.Columns.Add(nameof(Project.Name), typeof(string));\nprojectsDT.Columns.Add(nameof(Project.ProjectStartDate), typeof(DateTimeOffset));\nprojectsDT.Columns.Add(nameof(Project.Active), typeof(bool));\nprojectsDT.Columns.Add(nameof(Project.Draft), typeof(bool));\n\n\/\/ add rows to DataTable\nforeach (var project in projects)\n{\n    var row = projectsDT.NewRow();\n    row&#x5B;nameof(Project.Id)] = project.Id ?? (object)DBNull.Value;\n    row&#x5B;nameof(Project.Name)] = project.Name;\n    row&#x5B;nameof(Project.ProjectStartDate)] = project.ProjectStartDate ?? (object)DBNull.Value;\n    row&#x5B;nameof(Project.Active)] = project.Active;\n    row&#x5B;nameof(Project.Draft)] = project.Draft;\n    projectsDT.Rows.Add(row);\n}\n\n\/\/ create parameters\nvar parameters = new\n{\n    projects = projectsDT.AsTableValuedParameter(&quot;&#x5B;dbo].&#x5B;udtt_Project]&quot;)\n};\n\n\/\/ execute Stored Procedure\nreturn await conn.ExecuteScalarAsync&lt;int&gt;(\n    &quot;&#x5B;dbo].&#x5B;ProcedureWhichAcceptsProjectsAsTVP]&quot;,\n    param: parameters,\n    commandType: CommandType.StoredProcedure);\n<\/pre><\/div>\n\n\n<p>\u0426\u0435 \u0447\u0443\u0434\u043e\u0432\u0435 \u0440\u0456\u0448\u0435\u043d\u043d\u044f. \u041a\u0440\u0456\u043c \u0442\u043e\u0433\u043e, \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0443, \u0449\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454 \u0437\u0430 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f <em>DataTable, <\/em>\u044f\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0443 \u043a\u043b\u0430\u0441 <em>Project, <\/em>\u0449\u043e\u0431 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0439\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0432 \u0456\u043d\u0448\u0438\u0445 \u043c\u0456\u0441\u0446\u044f\u0445.\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u0417\u0433\u0435\u043d\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 SQL-\u0441\u043a\u0440\u0438\u043f\u0442<\/strong>\u00a0<\/h3>\n\n\n\n<p>\u0422\u0435\u043f\u0435\u0440 \u043f\u043e\u0433\u043b\u044f\u043d\u044c\u043c\u043e, \u0449\u043e \u0437\u0433\u0435\u043d\u0435\u0440\u0443\u0432\u0430\u0432 \u0456 \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0434\u043e\u0434\u0430\u0442\u043e\u043a Dapper \u0434\u043e \u0431\u0430\u0437\u0438 \u0434\u0430\u043d\u0438\u0445. \u0412 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456 Profiler \u043c\u0438 \u0431\u0430\u0447\u0438\u043c\u043e, \u0449\u043e \u0431\u0443\u043b\u043e \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442:\u00a0<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\ndeclare @p1 dbo.udtt_Project\ninsert into @p1 values(1,N&#039;Name1&#039;,&#039;2022-11-01 00:00:00 +01:00&#039;,1,0)\ninsert into @p1 values(2,N&#039;Name2&#039;,&#039;2022-12-01 00:00:00 +01:00&#039;,0,1)\n\nexec &#x5B;dbo].&#x5B;ProcedureWhichAcceptsProjectsAsTVP] @projects=@p1\n<\/pre><\/div>\n\n\n<p>\u0427\u0438 \u0432\u0441\u0435 \u0433\u0430\u0440\u0430\u0437\u0434? \u041d\u0443, \u0432\u0441\u0456 \u0434\u0430\u043d\u0456, \u044f\u043a\u0456 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u044c\u0441\u044f \u0432 \u0437\u043c\u0456\u043d\u043d\u0443 <em>@p1<\/em>, \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u044c\u0441\u044f \u0443 \u0432\u0438\u0433\u043b\u044f\u0434\u0456 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u0438\u0445 \u0447\u0438\u0441\u0435\u043b. \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <em>Insert<\/em>\u202f\u043d\u0435 \u0432\u043a\u0430\u0437\u0443\u0454 \u0436\u043e\u0434\u043d\u0438\u0445 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432, \u0442\u043e\u043c\u0443 \u0432\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u044f \u0437\u0430\u043b\u0435\u0436\u0438\u0442\u044c \u0432\u0456\u0434 \u0443\u0437\u0433\u043e\u0434\u0436\u0435\u043d\u043e\u0441\u0442\u0456 \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432 \u0432 C# <em>DataTable <\/em>\u0456 <em>\u0412\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0435\u043c \u0442\u0438\u043f\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0456 <\/em>\u0432 SQL. \u0417\u0430\u0432\u0436\u0434\u0438 \u0441\u043b\u0456\u0434 \u043f\u0430\u043c\u2019\u044f\u0442\u0430\u0442\u0438, \u0449\u043e \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u0430 \u043d\u0430\u0437\u0432\u043e\u044e \u0441\u0442\u043e\u0432\u043f\u0446\u044f \u043d\u0435 \u0437\u0434\u0456\u0439\u0441\u043d\u044e\u0454\u0442\u044c\u0441\u044f, \u0442\u043e\u0436 \u043f\u0456\u0434 \u0447\u0430\u0441 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f <em>DataTable<\/em> \u0437\u0430\u0432\u0436\u0434\u0438 \u0441\u043b\u0456\u0434 \u0434\u0431\u0430\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443 \u043f\u0440\u043e:\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0438\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432,\u00a0<\/li>\n\n\n\n<li>\u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432, \u044f\u043a\u0456 \u0456\u0441\u043d\u0443\u044e\u0442\u044c \u0432 UDTT, \u0430\u043b\u0435 \u0432\u0456\u0434\u0441\u0443\u0442\u043d\u0456 \u0432 \u043c\u043e\u0434\u0435\u043b\u0456 C#,\u00a0<\/li>\n\n\n\n<li>\u043f\u0440\u043e\u043f\u0443\u0441\u043a \u0440\u0435\u043a\u0432\u0456\u0437\u0438\u0442\u0456\u0432, \u044f\u043a\u0456 \u0456\u0441\u043d\u0443\u044e\u0442\u044c \u0432 \u043c\u043e\u0434\u0435\u043b\u0456 C#, \u0430\u043b\u0435 \u0432\u0456\u0434\u0441\u0443\u0442\u043d\u0456 \u0432 UDTT.\u00a0<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0443\u0439\u0442\u0435 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f TVP<\/strong>\u00a0<\/h2>\n\n\n\n<p>\u0417\u0430\u0433\u0430\u043b\u043e\u043c, \u043c\u0438 \u0432\u0436\u0435 \u043d\u0430\u0432\u0447\u0438\u043b\u0438\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u0438 TVP \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e Dapper. \u0429\u043e \u0449\u0435 \u043c\u043e\u0436\u043d\u0430 \u0437\u0440\u043e\u0431\u0438\u0442\u0438? \u0423\u044f\u0432\u0456\u0442\u044c, \u0449\u043e \u043c\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u043c\u043e \u0432 \u0434\u043e\u0434\u0430\u0442\u043a\u0443 \u0431\u0430\u0433\u0430\u0442\u043e \u0440\u0456\u0437\u043d\u0438\u0445 UDTT \u0430\u0431\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0456 \u0440\u043e\u0437\u0440\u043e\u0431\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u0437\u043c\u0456\u043d\u044e\u0454\u043c\u043e \u0457\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0422\u043e\u0434\u0456 \u043c\u0438 \u0437\u043c\u0443\u0448\u0435\u043d\u0456 \u0432\u0440\u0443\u0447\u043d\u0443 \u0432\u0438\u0437\u043d\u0430\u0447\u0430\u0442\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <em>DataTable <\/em>\u0434\u043b\u044f \u0432\u0441\u0456\u0445 UDTT \u0456 \u0432 \u0440\u0430\u0437\u0456 \u0432\u043d\u0435\u0441\u0435\u043d\u043d\u044f \u044f\u043a\u0438\u0445\u043e\u0441\u044c \u0437\u043c\u0456\u043d \u0432\u0438\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u0438 \u0457\u0445. \u0417\u0432\u0438\u0447\u0430\u0439\u043d\u043e, \u043c\u0438 \u043d\u0435 \u0445\u043e\u0447\u0435\u043c\u043e \u0432\u0438\u0442\u0440\u0430\u0447\u0430\u0442\u0438 \u0447\u0430\u0441 \u043d\u0430 \u0442\u0430\u043a\u0456 \u0434\u0456\u0457, \u0442\u043e\u043c\u0443 \u0441\u043f\u0440\u043e\u0431\u0443\u0454\u043c\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0443\u0432\u0430\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441 \u043f\u043e\u0431\u0443\u0434\u043e\u0432\u0438 <em>DataTable<\/em>.\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u0435 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f TVP \u2013 1-\u0439 \u043f\u0456\u0434\u0445\u0456\u0434<\/strong>\u00a0<\/strong><\/h3>\n\n\n\n<p>\u041f\u0435\u0440\u0448\u0435, \u0449\u043e \u0441\u043f\u0430\u0434\u0430\u0454 \u043d\u0430 \u0434\u0443\u043c\u043a\u0443 \u2013 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0435 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f <em>DataTable <\/em>\u043d\u0430<em> <\/em>\u043e\u0441\u043d\u043e\u0432\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0456. \u041d\u0430\u043c \u043d\u0435 \u0434\u043e\u0432\u0435\u0434\u0435\u0442\u044c\u0441\u044f \u0440\u043e\u0431\u0438\u0442\u0438 \u0446\u0435 \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0443, \u043a\u043e\u043b\u0438 \u0437\u2019\u044f\u0432\u043b\u044f\u0454\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u0438\u0439 UDTT. \u041f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0432\u043e\u0440\u0456\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 C# \u0437 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0438\u043c\u0438 \u0436 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u044f\u043c\u0438 \u0456 \u0437\u0430\u043f\u0443\u0441\u0442\u0456\u0442\u044c \u044f\u043a\u0438\u0439\u0441\u044c \u043c\u0435\u0442\u043e\u0434, \u0449\u043e \u0433\u0435\u043d\u0435\u0440\u0443\u0454 <em>DataTable<\/em>. \u0412\u0438\u0433\u043b\u044f\u0434\u0430\u0454 \u0434\u043e\u0431\u0440\u0435? \u0421\u0443\u043f\u0435\u0440!&nbsp;<\/p>\n\n\n\n<p>\u041c\u0438 \u043c\u043e\u0436\u0435\u043c\u043e \u0432\u0438\u0437\u043d\u0430\u0447\u0438\u0442\u0438 \u043c\u0435\u0442\u043e\u0434 \u0440\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u043d\u044f, \u044f\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u044e\u0454 <em>IEnumerable&lt;T&gt; <\/em>\u0432 <em>DataTable <\/em>\u043d\u0430<em> <\/em>\u043e\u0441\u043d\u043e\u0432\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0435\u0439, \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0445 \u0443 <em>T,<\/em>&nbsp;<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic static DataTable ToDataTable&lt;T&gt;(this IEnumerable&lt;T&gt; enumerable)\n{\n    var dataTable = new DataTable();\n    var propertyDescriptorCollection = TypeDe-scriptor.GetProperties(typeof(T));\n    for (int i = 0; i &lt; propertyDescriptorCollection.Count; i++)\n    {\n        var propertyDescriptor = propertyDescriptorCollection&#x5B;i];\n        var type = propertyDescriptor.PropertyType;\n\n        if (type.IsGenericType &amp;&amp; type.GetGenericTypeDefinition() == typeof(Nullable&lt;&gt;))\n            type = Nullable.GetUnderlyingType(type)!;\n\n        dataTable.Columns.Add(propertyDescriptor.Name, type);\n    }\n    var values = new object&#x5B;propertyDescriptorCollection.Count];\n    foreach (T iListItem in enumerable)\n    {\n        for (int i = 0; i &lt; values.Length; i++)\n        {\n            values&#x5B;i] = propertyDescriptorCollec-tion&#x5B;i].GetValue(iListItem)!;\n        }\n        dataTable.Rows.Add(values);\n    }\n    return dataTable;\n}\n<\/pre><\/div>\n\n\n<p>\u0456 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u0456\u0434 \u0447\u0430\u0441 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f TVP:\u00a0<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nusing var conn = new SqlConnection(connectionString);\nconn.Open();\n\n\/\/ some example data\nList&lt;Project&gt; projects = new()\n{\n    new Project { Id = 1, Name = &quot;Name1&quot;, ProjectStartDate = DateTimeOff-set.Parse(&quot;2022-11-01&quot;), Active = true, Draft = false },\n    new Project { Id = 2, Name = &quot;Name2&quot;, ProjectStartDate = DateTimeOff-set.Parse(&quot;2022-12-01&quot;), Active = false, Draft = true }\n};\n\n\/\/ create DataTable\nvar projectsDT = projects.ToDataTable();\n\n\/\/ create parameters\nvar parameters = new\n{\n    projects = projectsDT.AsTableValuedParameter(&quot;&#x5B;dbo].&#x5B;udtt_Project]&quot;)\n};\n\n\/\/ execute Stored Procedure\nreturn await conn.ExecuteScalarAsync&lt;int&gt;(\n    &quot;&#x5B;dbo].&#x5B;ProcedureWhichAcceptsProjectsAsTVP]&quot;,\n    param: parameters,\n    commandType: CommandType.StoredProcedure);\n<\/pre><\/div>\n\n\n<p>\u0422\u0430\u043a\u0438\u0439 \u043f\u0456\u0434\u0445\u0456\u0434 \u0432\u0438\u0433\u043b\u044f\u0434\u0430\u0454 \u0434\u043e\u0432\u043e\u043b\u0456 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u0438\u043c. \u041d\u0430\u043c \u0431\u0456\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0432\u0438\u0437\u043d\u0430\u0447\u0430\u0442\u0438 <em>DataTable <\/em>\u0432\u0440\u0443\u0447\u043d\u0443. \u041d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u0442\u0438 \u043c\u0435\u0442\u043e\u0434 <em>ToDataTable <\/em>\u0434\u043b\u044f \u0431\u0443\u0434\u044c-\u044f\u043a\u043e\u0433\u043e <em>IEnumerable<\/em>&lt;T>. \u041d\u0430 \u0436\u0430\u043b\u044c, \u0446\u0435\u0439 \u043f\u0456\u0434\u0445\u0456\u0434 \u043c\u0430\u0454 \u0456 \u0441\u0432\u043e\u0457 \u043d\u0435\u0434\u043e\u043b\u0456\u043a\u0438. \u041f\u0430\u043c\u2019\u044f\u0442\u0430\u0454\u0442\u0435, \u044f\u043a\u0438\u043c \u0447\u0438\u043d\u043e\u043c \u0434\u043e\u0434\u0430\u0442\u043e\u043a Dapper \u0441\u0442\u0432\u043e\u0440\u044e\u0454 TVP? \u0412\u0456\u043d \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0441\u0442\u043e\u0432\u043f\u0446\u0456 \u0432 \u043f\u0435\u0432\u043d\u043e\u043c\u0443 \u043f\u043e\u0440\u044f\u0434\u043a\u0443, \u0430 \u043d\u0435 \u0437\u0430 \u043d\u0430\u0437\u0432\u0430\u043c\u0438 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432. \u0412\u0456\u0434\u0442\u0430\u043a \u0456\u0441\u043d\u0443\u0454 \u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0456\u0439, \u0443 \u044f\u043a\u0438\u0445 \u0442\u0430\u043a\u0438\u0439 \u043f\u0456\u0434\u0445\u0456\u0434 \u043d\u0435 \u0431\u0443\u0434\u0435 \u043f\u0440\u0430\u0446\u044e\u0432\u0430\u0442\u0438:\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u042f\u043a\u0449\u043e \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0435\u043a\u0432\u0456\u0437\u0438\u0442\u0456\u0432 \u043c\u043e\u0434\u0435\u043b\u0456 C# \u043d\u0435 \u0437\u0431\u0456\u0433\u0430\u0454\u0442\u044c\u0441\u044f \u0437 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432 UDTT (\u043c\u043e\u0436\u043b\u0438\u0432\u043e, \u0432 \u043c\u043e\u0434\u0435\u043b\u044f\u0445 \u0454 \u0441\u043f\u0430\u0434\u043a\u043e\u0432\u0456\u0441\u0442\u044c, \u044f\u043a\u0430 \u0437\u043c\u0456\u043d\u044e\u0454 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0430\u0431\u043e \u0449\u043e\u0441\u044c \u0456\u043d\u0448\u0435?).\u00a0<\/li>\n\n\n\n<li>\u042f\u043a\u0449\u043e \u0432 \u043c\u043e\u0434\u0435\u043b\u0456 C# \u0454 \u044f\u043a\u0430\u0441\u044c \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0430 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u0456\u0441\u0442\u044c, \u044f\u043a\u043e\u0457 \u043d\u0435\u043c\u0430\u0454 \u0432 UDTT (\u043c\u0438 \u0441\u043f\u0440\u043e\u0431\u0443\u0454\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0438 \u0437\u0430\u043d\u0430\u0434\u0442\u043e \u0431\u0430\u0433\u0430\u0442\u043e \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432 \u0456 \u043e\u0442\u0440\u0438\u043c\u0430\u0454\u043c\u043e \u043f\u043e\u043c\u0438\u043b\u043a\u0443).\u00a0<\/li>\n\n\n\n<li>\u042f\u043a\u0449\u043e \u0432 UDTT \u0454 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c, \u044f\u043a\u043e\u0433\u043e \u043d\u0435 \u0456\u0441\u043d\u0443\u0454 \u0432 \u043c\u043e\u0434\u0435\u043b\u0456 C# (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, \u043c\u0435\u043d\u0448\u0430 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432, \u043d\u0456\u0436 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e, \u043f\u043e\u0440\u0443\u0448\u0443\u0454 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0456 \u043c\u043e\u0436\u0435 \u0441\u043f\u0440\u0438\u0447\u0438\u043d\u0438\u0442\u0438 \u043f\u043e\u043c\u0438\u043b\u043a\u0443 \u0441\u0443\u043c\u0456\u0441\u043d\u043e\u0441\u0442\u0456 \u0442\u0438\u043f\u0456\u0432 \u0443 \u0441\u0442\u043e\u0432\u043f\u0446\u044f\u0445).\u00a0<\/li>\n<\/ul>\n\n\n\n<p>\u0417 \u043e\u0433\u043b\u044f\u0434\u0443 \u043d\u0430 \u0432\u0438\u0449\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u0435, \u0446\u0435\u0439 \u043f\u0456\u0434\u0445\u0456\u0434 \u0431\u0443\u0434\u0435 \u043f\u0440\u0430\u0446\u044e\u0432\u0430\u0442\u0438 \u0442\u0456\u043b\u044c\u043a\u0438 \u0442\u043e\u0434\u0456, \u043a\u043e\u043b\u0438 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0456 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432 \u0442\u043e\u0447\u043d\u043e \u0437\u0431\u0456\u0433\u0430\u044e\u0442\u044c\u0441\u044f \u043c\u0456\u0436 \u043c\u043e\u0434\u0435\u043b\u043b\u044e UDTT \u0456 C#. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u044e \u043f\u0435\u0440\u0435\u0432\u0430\u0433\u043e\u044e \u0454 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0435 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f <em>DataTable, <\/em>\u0430\u043b\u0435 \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u044e\u0447\u0438 \u043d\u0435\u0434\u043e\u043b\u0456\u043a\u0438 \u0446\u044c\u043e\u0433\u043e \u043f\u0456\u0434\u0445\u043e\u0434\u0443, \u043c\u043e\u0436\u043d\u0430 \u0441\u043a\u0430\u0437\u0430\u0442\u0438, \u0449\u043e \u0432\u0456\u043d \u043d\u0435 \u043d\u0430\u0441\u0442\u0456\u043b\u044c\u043a\u0438 \u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0438\u0439, \u044f\u043a \u0445\u043e\u0442\u0456\u043b\u043e\u0441\u044f \u0431.&nbsp;<\/p>\n\n\n\n<p>\u0417\u0440\u0435\u0448\u0442\u043e\u044e, \u044f\u043a\u0449\u043e \u0443 \u0432\u0430\u0448\u043e\u043c\u0443 \u043f\u0440\u043e\u0454\u043a\u0442\u0456 \u0432\u0441\u0456 \u043c\u043e\u0434\u0435\u043b\u0456 C# \u0442\u043e\u0447\u043d\u043e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u044e\u0442\u044c UDTT, \u0456 \u0432\u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u0441\u0442\u0435\u0436\u0438\u0442\u0438 \u0437\u0430 \u0442\u0438\u043c, \u0449\u043e\u0431 \u0442\u0430\u043a \u0456 \u0437\u0430\u043b\u0438\u0448\u0430\u043b\u043e\u0441\u044f, \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u043f\u0456\u0434\u0445\u0456\u0434. \u042f\u043a\u0449\u043e \u0436 \u0432\u0438 \u0445\u043e\u0447 \u0442\u0440\u043e\u0445\u0438 \u0441\u0442\u0443\u0440\u0431\u043e\u0432\u0430\u043d\u0456 \u043d\u0435\u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0456\u0441\u0442\u044e, \u044f \u0437\u0430\u043f\u0440\u043e\u0448\u0443\u044e \u0432\u0430\u0441 \u0434\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0440\u043e\u0437\u0434\u0456\u043b\u0443, \u0443 \u044f\u043a\u043e\u043c\u0443 \u043c\u0438 \u0441\u043f\u0440\u043e\u0431\u0443\u0454\u043c\u043e \u0440\u043e\u0437\u0440\u043e\u0431\u0438\u0442\u0438 \u043a\u0440\u0430\u0449\u0435 \u0440\u0456\u0448\u0435\u043d\u043d\u044f.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u0435 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f TVP \u2013 2-\u0439 \u043f\u0456\u0434\u0445\u0456\u0434<\/strong>\u00a0<\/h3>\n\n\n\n<p>\u041d\u0430\u0448 \u043f\u0435\u0440\u0448\u0438\u0439 \u043f\u0456\u0434\u0445\u0456\u0434 \u043c\u0430\u0432 \u0431\u0430\u0433\u0430\u0442\u043e \u043d\u0435\u0434\u043e\u043b\u0456\u043a\u0456\u0432, \u044f\u043a\u0456 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0432\u0440\u0430\u0445\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0443\u0441\u0443\u043d\u0443\u0442\u0438. \u041e\u0434\u043d\u0430\u043a \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0449\u043e\u0431 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u0438 \u043f\u043b\u0443\u0442\u0430\u043d\u0438\u043d\u0438 \u0432 \u0441\u0442\u043e\u0432\u043f\u0446\u044f\u0445 \u0430\u0431\u043e \u0437\u0430\u043f\u043e\u0432\u043d\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0443\u0442\u043d\u0456 \u0441\u0442\u043e\u0432\u043f\u0446\u0456, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u043d\u0430\u0442\u0438 \u044f\u043a \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043c\u043e\u0434\u0435\u043b\u0456 \u043d\u0430 C#, \u0442\u0430\u043a \u0456 UDTT \u0432 \u0431\u0430\u0437\u0456 \u0434\u0430\u043d\u0438\u0445. \u041e\u0442\u0436\u0435, \u0441\u043f\u0440\u043e\u0431\u0443\u0439\u043c\u043e \u0437\u0447\u0438\u0442\u0430\u0442\u0438 \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f UDTT \u0437 \u0431\u0430\u0437\u0438 \u0434\u0430\u043d\u0438\u0445 \u0456 \u0437\u0456\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043a\u043e\u0436\u043d\u0443 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u0456\u0441\u0442\u044c \u0437 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0438\u043c \u0441\u0442\u043e\u0432\u043f\u0446\u0435\u043c UDTT \u0437\u0430 \u043d\u0430\u0437\u0432\u043e\u044e. \u0422\u0430\u043a \u043c\u0438 \u0443\u043d\u0438\u043a\u043d\u0435\u043c\u043e \u043f\u043b\u0443\u0442\u0430\u043d\u0438\u043d\u0438 \u0437 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432 \u0430\u0431\u043e \u043f\u043e\u043c\u0438\u043b\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u0442\u0435, \u0449\u043e \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432 \u043d\u0435 \u0437\u0431\u0456\u0433\u0430\u0454\u0442\u044c\u0441\u044f.&nbsp;<\/p>\n\n\n\n<p>\u041f\u043e\u0433\u043b\u044f\u043d\u044c\u043c\u043e \u043d\u0430 \u0440\u0435\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044e:&nbsp;<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nusing Dapper;\nusing System.Data;\n\nnamespace DapperTVPOrderedExample.DapperExtensions\n{\n    internal static class DapperExtensions\n    {\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ This extension converts enumerable of objects to a Dapper TVP with columns ordered by T-SQL UDTT columns.\n        \/\/\/ Class properties names must correspond to T-SQL UDTT column names.\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;typeparam name=&quot;T&quot;&gt;Type to convert from&lt;\/typeparam&gt;\n        \/\/\/ &lt;param name=&quot;enumerable&quot;&gt;&lt;\/param&gt;\n        \/\/\/ &lt;param name=&quot;typeName&quot;&gt;database type name; if schema is not defi-ned then &#039;dbo&#039; schema is used by default&lt;\/param&gt;\n        \/\/\/ &lt;param name=&quot;connection&quot;&gt;database connection needed to determine column order&lt;\/param&gt;\n        \/\/\/ &lt;param name=&quot;transaction&quot;&gt;optional transaction if conversion is done inside any&lt;\/param&gt;\n        \/\/\/ &lt;returns&gt;Table-Valued Parameter&lt;\/returns&gt;\n        public static async Task&lt;SqlMapper.ICustomQueryParameter&gt; AsTableValu-edParameter&lt;T&gt;(this IEnumerable&lt;T&gt; enumerable, string typeName, IDbConnection connection, IDbTransaction? transaction = null)\n        {\n            \/\/ set type schema and name\n            var schema = &quot;dbo&quot;;\n            var isolatedTypeName = &quot;&quot;;\n            var typeNameParts = typeName.Replace(&quot;&#x5B;&quot;, &quot;&quot;).Replace(&quot;]&quot;, &quot;&quot;).Split(&quot;.&quot;);\n            if (typeNameParts.Length == 1)\n            {\n                isolatedTypeName = typeNameParts&#x5B;0];\n            }\n            else if (typeNameParts.Length == 2)\n            {\n                schema = typeNameParts&#x5B;0];\n                isolatedTypeName = typeNameParts&#x5B;1];\n            }\n            else\n            {\n                throw new ArgumentException($&quot;Argument typeName = {typeName} can have only one dot dividing schema from type name.&quot;);\n            }\n\n            \/\/ query for column names in order\n            var typeColumnsQuery = $@&quot;SELECT c.name\n            FROM sys.columns c\n            join sys.table_types t on t.type_table_object_id = c.object_id\n            join sys.schemas s on s.schema_id = t.schema_id\n            where s.name = &#039;{schema}&#039;\n            and t.&#x5B;name] = &#039;{isolatedTypeName}&#039;\n            order by column_id;&quot;;\n\n            var orderedColumnNames = await connec-tion.QueryAsync&lt;string&gt;(typeColumnsQuery, transaction: transaction);\n            if (orderedColumnNames == null || !orderedColumnNames.Any())\n                throw new Exception($&quot;Table type {typeName} returned no co-lumns&quot;);\n\n            \/\/ create DataTable\n            using var dt = new DataTable();\n            var props = typeof(T).GetProperties();\n\n            \/\/ add columns in specific order\n            foreach (string colName in orderedColumnNames)\n            {\n                var prop = props.SingleOrDefault(p =&gt; p.Name == colName);\n                if (prop == null)\n                    dt.Columns.Add(colName);\n                else\n                    dt.Columns.Add(prop.Name, Nulla-ble.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);\n            }\n\n            \/\/ add row to DataTable for every item\n            foreach (var item in enumerable)\n            {\n                var row = dt.NewRow();\n                \/\/ find corresponding prop for every column and add its value or null\n                foreach (string colName in orderedColumnNames)\n                {\n                    try\n                    {\n                        var prop = props.SingleOrDefault(p =&gt; p.Name == colNa-me);\n                        if (prop == null)\n                            row&#x5B;colName] = (object)DBNull.Value;\n                        else\n                        {\n                            var value = prop.GetValue(item, null);\n                            row&#x5B;prop.Name] = value ?? (object)DBNull.Value;\n                        }\n                    }\n                    catch (Exception ex)\n                    {\n                        throw new Exception($&quot;Exception when assigning value to DataTable column when colName = &#039;{colName}&#039;&quot;, ex);\n                    }\n\n                }\n                dt.Rows.Add(row);\n            }\n            \/\/ return TVP\n            return dt.AsTableValuedParameter(typeName);\n        }\n\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ This extension converts an object to a 1-row Dapper TVP with co-lumns ordered by T-SQL UDTT columns.\n        \/\/\/ Class properties names must coorrestopond to T-SQL UDTT column names.\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;typeparam name=&quot;T&quot;&gt;Type to convert from&lt;\/typeparam&gt;\n        \/\/\/ &lt;param name=&quot;item&quot;&gt;&lt;\/param&gt;\n        \/\/\/ &lt;param name=&quot;typeName&quot;&gt;database type name; if schema is not defi-ned then &#039;dbo&#039; schema is used by default&lt;\/param&gt;\n        \/\/\/ &lt;param name=&quot;connection&quot;&gt;database connection needed to determine column order&lt;\/param&gt;\n        \/\/\/ &lt;param name=&quot;transaction&quot;&gt;optional transaction if conversion is done inside any&lt;\/param&gt;\n        \/\/\/ &lt;returns&gt;Table-Valued Parameter&lt;\/returns&gt;\n        public static async Task&lt;SqlMapper.ICustomQueryParameter&gt; AsTableValu-edParameter&lt;T&gt;(this T item, string typeName, IDbConnection connection, IDb-Transaction? transaction = null) where T : class\n        {\n            return await (new List&lt;T&gt; { item }).AsEnumerable().AsTableValuedParameter(typeName, connection, transaction);\n        }\n\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ This extension converts list of objects to a Dapper TVP with co-lumns ordered by T-SQL UDTT columns.\n        \/\/\/ Class properties names must coorrestopond to T-SQL UDTT column names.\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;typeparam name=&quot;T&quot;&gt;Type to convert from&lt;\/typeparam&gt;\n        \/\/\/ &lt;param name=&quot;list&quot;&gt;&lt;\/param&gt;\n        \/\/\/ &lt;param name=&quot;typeName&quot;&gt;database type name; if schema is not defi-ned then &#039;dbo&#039; schema is used by default&lt;\/param&gt;\n        \/\/\/ &lt;param name=&quot;connection&quot;&gt;database connection needed to determine column order&lt;\/param&gt;\n        \/\/\/ &lt;param name=&quot;transaction&quot;&gt;optional transaction if conversion is done inside any&lt;\/param&gt;\n        \/\/\/ &lt;returns&gt;Table-Valued Parameter&lt;\/returns&gt;\n        public static async Task&lt;SqlMapper.ICustomQueryParameter&gt; AsTableValu-edParameter&lt;T&gt;(this List&lt;T&gt; list, string typeName, IDbConnection connection, IDbTransaction? transaction = null)\n        {\n            return await list.AsEnumerable().AsTableValuedParameter(typeName, connection, transaction);\n        }\n\n\n    }\n}\n<\/pre><\/div>\n\n\n<p>\u0423 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043e\u043c\u0443 \u0432\u0438\u0449\u0435 \u043a\u043e\u0434\u0456 \u043c\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u043c\u043e \u043b\u0438\u0448\u0435 <em>Dapper <\/em>\u0442\u0430 <em>System.Data<\/em>. \u0422\u0430\u043a\u0456 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438, \u044f\u043a \u043f\u0440\u043e\u0441\u0442\u0456\u0440 \u0456\u043c\u0435\u043d, \u043d\u0430\u0437\u0432\u0438 \u043a\u043b\u0430\u0441\u0456\u0432 \u0430\u0431\u043e \u043c\u0435\u0442\u043e\u0434\u0456\u0432 \u043c\u043e\u0436\u043d\u0430 \u0437\u043c\u0456\u043d\u044e\u0432\u0430\u0442\u0438, \u0442\u043e\u043c\u0443 \u0432\u0438, \u0437\u0430 \u0431\u0430\u0436\u0430\u043d\u043d\u044f\u043c, \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0456\u043b\u044c\u043d\u043e \u0446\u0435 \u0440\u043e\u0431\u0438\u0442\u0438 \u0446\u0435. \u042f \u043d\u0430\u0437\u0432\u0430\u0432 \u043c\u0435\u0442\u043e\u0434 <em>AsTableValuedParameter <\/em>(\u0442\u0430\u043a \u0441\u0430\u043c\u043e, \u044f\u043a \u0456 \u043e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u044c\u043d\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 Dapper), \u0449\u043e\u0431 \u0447\u0456\u0442\u043a\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0438, \u0449\u043e \u0432\u0456\u043d \u0434\u0430\u0454 \u0442\u043e\u0439 \u0441\u0430\u043c\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0449\u043e \u0456 Dapper.&nbsp;<\/p>\n\n\n\n<p>\u0412\u0430\u0440\u0442\u043e \u0437\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u0438, \u0449\u043e \u0443 \u043d\u0430\u0441 \u0454 3 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0438, \u043f\u0440\u0438\u0447\u043e\u043c\u0443 2 \u0437 \u043d\u0438\u0445 \u043b\u0438\u0448\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u044c \u0434\u0430\u043d\u0456 \u0434\u0430\u043b\u0456 \u0437\u0433\u0456\u0434\u043d\u043e \u0437 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0438\u043c \u0442\u0438\u043f\u043e\u043c. \u041c\u0438 \u0436 \u0437\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043c\u043e\u0441\u044f \u043d\u0430 1-\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0456, \u044f\u043a\u0438\u0439 \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u044e \u043b\u043e\u0433\u0456\u043a\u0443.&nbsp;<\/p>\n\n\n\n<p>1-\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0454 <em>\u041f\u0440\u043e\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u043c \u043f\u0435\u0440\u0435\u043b\u0456\u043a\u043e\u043c (Enumerable) <\/em>\u043e\u0431\u2019\u0454\u043a\u0442\u0456\u0432, \u044f\u043a\u0456 \u043c\u0456\u0441\u0442\u044f\u0442\u044c \u0434\u0430\u043d\u0456 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f. \u0414\u0430\u043b\u0456 \u043c\u0438 \u043f\u043e\u0432\u0438\u043d\u043d\u0456 \u0432\u043a\u0430\u0437\u0430\u0442\u0438 \u043d\u0430\u0437\u0432\u0443 UDTT, \u0432 \u044f\u043a\u0438\u0439 \u043c\u0438 \u0445\u043e\u0447\u0435\u043c\u043e \u0432\u0438\u043a\u043e\u043d\u0430\u0442\u0438 \u043f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f. \u0419\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u0438 \u0437\u0456 \u0441\u0445\u0435\u043c\u043e\u044e \u0430\u0431\u043e \u0431\u0435\u0437 \u043d\u0435\u0457, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0443 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0438\u0445 \u0434\u0443\u0436\u043a\u0430\u0445. \u041f\u043e\u0442\u0456\u043c \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0437\u2019\u0454\u0434\u043d\u0430\u043d\u043d\u044f \u0437 \u0431\u0430\u0437\u043e\u044e \u0434\u0430\u043d\u0438\u0445. \u0412\u043e\u043d\u043e \u0431\u0443\u0434\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432 UDTT. \u0412\u0440\u0435\u0448\u0442\u0456-\u0440\u0435\u0448\u0442, \u0443 \u043d\u0430\u0441 \u0454 \u043d\u0435\u043e\u0431\u043e\u0432\u2019\u044f\u0437\u043a\u043e\u0432\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u0457, \u044f\u043a\u0438\u0439 \u043c\u043e\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0438, \u044f\u043a\u0449\u043e \u043f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u0432\u0456\u0434\u0431\u0443\u0432\u0430\u0454\u0442\u044c\u0441\u044f \u0443 \u0441\u043a\u043b\u0430\u0434\u0456 \u0431\u0443\u0434\u044c-\u044f\u043a\u043e\u0457 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u0457.&nbsp;<\/p>\n\n\n\n<p>\u041b\u043e\u0433\u0456\u043a\u0430 \u0434\u043e\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0430. \u0421\u043f\u043e\u0447\u0430\u0442\u043a\u0443 \u043c\u0438 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0454\u043c\u043e \u0437\u043c\u0456\u043d\u043d\u0456 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0441\u0445\u0435\u043c\u0438 \u0442\u0430 \u0440\u044f\u0434\u043a\u0430 \u0456\u043c\u0435\u043d UDTT. \u041f\u043e\u0442\u0456\u043c \u043c\u0438 \u0440\u043e\u0431\u0438\u043c\u043e \u0437\u0430\u043f\u0438\u0442 \u0434\u043e \u0431\u0430\u0437\u0438 \u0434\u0430\u043d\u0438\u0445, \u0449\u043e\u0431 \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432 UDTT. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0456 \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 \u043c\u0438 \u0434\u043e\u0434\u0430\u0454\u043c\u043e \u0441\u0442\u043e\u0432\u043f\u0446\u0456 \u0432 <em>DataTable <\/em>\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0437 \u0442\u0438\u043f\u043e\u043c, \u0432\u0437\u044f\u0442\u0438\u043c \u0437\u0456 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e\u0433\u043e \u0440\u0435\u043a\u0432\u0456\u0437\u0438\u0442\u0443 \u0432 \u043c\u043e\u0434\u0435\u043b\u0456 C# (\u0430\u0431\u043e \u0431\u0435\u0437 \u0442\u0438\u043f\u0443, \u044f\u043a\u0449\u043e \u0440\u0435\u043a\u0432\u0456\u0437\u0438\u0442\u0443 \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e). \u041f\u0456\u0437\u043d\u0456\u0448\u0435 \u043c\u0438 \u0434\u043e\u0434\u0430\u0454\u043c\u043e \u0440\u044f\u0434\u043e\u043a \u0434\u043e <em>DataTable <\/em>\u0434\u043b\u044f \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0431\u2019\u0454\u043a\u0442\u0430 \u0443 \u0432\u0445\u0456\u0434\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0456 <em>Enumerable <\/em>\u0456 \u043f\u0440\u0438\u0441\u0432\u043e\u044e\u0454\u043c\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u0438\u043c \u0441\u0442\u043e\u0432\u043f\u0447\u0438\u043a\u0430\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0456 \u0456\u043c\u0435\u043d\u0456 (\u0430\u0431\u043e null, \u044f\u043a\u0449\u043e \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e). \u041d\u0430\u043f\u0440\u0438\u043a\u0456\u043d\u0446\u0456 \u043c\u0438 \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u0454\u043c\u043e \u043e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u044c\u043d\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <em>AsTableValuedParameter<\/em> \u0443<em> <\/em>Dapper \u0456 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u043c\u043e \u0439\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.&nbsp;<\/p>\n\n\n\n<p>\u042f\u043a \u0439\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438? \u041d\u0430\u0441\u0430\u043c\u043f\u0435\u0440\u0435\u0434 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0439\u043e\u0433\u043e \u0434\u043e\u0434\u0430\u0442\u0438 <em>\u0437\u0430<\/em> <em>\u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e DapperTVPOrderedExample.DapperExtensions<\/em>. \u0422\u043e\u0434\u0456 \u043c\u0438 \u0437\u043c\u043e\u0436\u0435\u043c\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043d\u0430\u0448\u0456 \u043c\u0435\u0442\u043e\u0434\u0438 \u043d\u0430 \u0431\u0443\u0434\u044c-\u044f\u043a\u043e\u043c\u0443 \u043e\u0431\u2019\u0454\u043a\u0442\u0456, IEnumerable \u0430\u0431\u043e \u0421\u043f\u0438\u0441\u043a\u0443 \u043e\u0431\u2019\u0454\u043a\u0442\u0456\u0432 \u0431\u0435\u0437\u043f\u043e\u0441\u0435\u0440\u0435\u0434\u043d\u044c\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u043c \u0447\u0438\u043d\u043e\u043c:&nbsp;<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nusing var conn = new SqlConnection(connectionString);\nconn.Open();\n\n\/\/ some example data\nList&lt;Project&gt; projects = new()\n{\n    new Project { Id = 1, Name = &quot;Name1&quot;, ProjectStartDate = DateTimeOffset.Parse(&quot;2022-11-01&quot;), Active = true, Draft = false },\n    new Project { Id = 2, Name = &quot;Name2&quot;, ProjectStartDate = DateTimeOffset.Parse(&quot;2022-12-01&quot;), Active = false, Draft = true }\n};\n\n\/\/ create parameters\nvar parameters = new\n{\n    projects = await projects.AsTableValuedParameter(&quot;&#x5B;dbo].&#x5B;udtt_Project]&quot;, conn)\n};\n\n\/\/ execute Stored Procedure\nreturn await conn.ExecuteScalarAsync&lt;int&gt;(\n    &quot;&#x5B;dbo].&#x5B;ProcedureWhichAcceptsProjectsAsTVP]&quot;,\n    param: parameters,\n    commandType: CommandType.StoredProcedure);\n<\/pre><\/div>\n\n\n<p>\u041e\u0441\u044c \u0456 \u0432\u0441\u0435. \u041d\u0430\u043c \u043d\u0435\u043c\u0430\u0454 \u043f\u043e\u0442\u0440\u0435\u0431\u0438 \u0442\u0443\u0440\u0431\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u043f\u0440\u043e:\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0438\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432,\u00a0<\/li>\n\n\n\n<li>\u0434\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432, \u044f\u043a\u0456 \u0456\u0441\u043d\u0443\u044e\u0442\u044c \u0432 UDTT, \u0430\u043b\u0435 \u0432\u0456\u0434\u0441\u0443\u0442\u043d\u0456 \u0432 \u043c\u043e\u0434\u0435\u043b\u0456 C#,\u00a0<\/li>\n\n\n\n<li>\u043f\u0440\u043e\u043f\u0443\u0441\u043a \u0440\u0435\u043a\u0432\u0456\u0437\u0438\u0442\u0456\u0432, \u044f\u043a\u0456 \u0456\u0441\u043d\u0443\u044e\u0442\u044c \u0432 \u043c\u043e\u0434\u0435\u043b\u0456 C#, \u0430\u043b\u0435 \u0432\u0456\u0434\u0441\u0443\u0442\u043d\u0456 \u0432 UDTT.\u00a0<\/li>\n<\/ul>\n\n\n\n<p>\u041e\u0434\u043d\u0430\u043a \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0432\u0435\u0440\u043d\u0443\u0442\u0438 \u0443\u0432\u0430\u0433\u0443 \u043d\u0430 \u043a\u0456\u043b\u044c\u043a\u0430 \u0456\u043d\u0448\u0438\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u0456\u0432:\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0456\u043c\u0435\u043d\u0430 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0435\u0439 \u043f\u043e\u0432\u0438\u043d\u043d\u0456 \u0437\u0431\u0456\u0433\u0430\u0442\u0438\u0441\u044f \u0437 \u0456\u043c\u0435\u043d\u0430\u043c\u0438 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432 UDTT,\u00a0<\/li>\n\n\n\n<li>\u044f\u043a\u0449\u043e \u0432 UDTT \u0454 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u0439 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c, \u0430 \u0432 \u043c\u043e\u0434\u0435\u043b\u0456 C# \u0439\u043e\u0433\u043e \u043d\u0435\u043c\u0430\u0454, \u0442\u043e \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u0443 TVP \u0431\u0443\u0434\u0435 \u0434\u043e\u0434\u0430\u043d\u043e \u0437 \u0443\u0441\u0456\u043c\u0430 \u043d\u0443\u043b\u044c\u043e\u0432\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c\u0438 \u0431\u0435\u0437 \u0436\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f,\u00a0<\/li>\n\n\n\n<li>\u043a\u043e\u0436\u043d\u0435 \u043f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043d\u0430 TVP \u043d\u0430\u0434\u0441\u0438\u043b\u0430\u0442\u0438\u043c\u0435 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0438\u0439 \u0437\u0430\u043f\u0438\u0442 \u0434\u043e \u0431\u0430\u0437\u0438 \u0434\u0430\u043d\u0438\u0445.\u00a0<\/li>\n<\/ul>\n\n\n\n<p>\u0417\u0432\u0438\u0447\u0430\u0439\u043d\u043e, \u043c\u0438 \u043c\u043e\u0436\u0435\u043c\u043e \u0440\u043e\u0437\u0432\u0438\u043d\u0443\u0442\u0438 \u0446\u044e \u0456\u0434\u0435\u044e \u0434\u0430\u043b\u0456, \u0449\u043e\u0431 \u0443\u0441\u0443\u043d\u0443\u0442\u0438 \u0446\u0456 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438. \u041c\u0438 \u043c\u043e\u0436\u0435\u043c\u043e \u0440\u0435\u0430\u043b\u0456\u0437\u0443\u0432\u0430\u0442\u0438 <em>\u0410\u0442\u0440\u0438\u0431\u0443\u0442 (Attribute) <\/em>\u0434\u043b\u044f \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0435\u0439, \u044f\u043a\u0438\u0439 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438\u043c\u0435 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0430\u0437\u0432\u0438 \u0441\u0442\u043e\u0432\u043f\u0446\u044f UDTT, \u044f\u043a\u0449\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u043c\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u0438 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043f\u043e-\u0456\u043d\u0448\u043e\u043c\u0443. \u041c\u0438 \u043c\u043e\u0436\u0435\u043c\u043e \u0440\u0435\u0430\u043b\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044e\u0432\u0430\u043d\u043d\u044f, \u044f\u043a\u0435 \u0441\u043f\u043e\u0432\u0456\u0449\u0430\u0442\u0438\u043c\u0435 \u043f\u0440\u043e \u043d\u0435\u0441\u043f\u0456\u0432\u043f\u0430\u0434\u0456\u043d\u043d\u044f \u044f\u043a\u043e\u0433\u043e\u0441\u044c \u0441\u0442\u043e\u0432\u043f\u0446\u044f UDTT \u0437 \u0431\u0443\u0434\u044c-\u044f\u043a\u043e\u044e \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u0456\u0441\u0442\u044e \u043a\u043b\u0430\u0441\u0443. \u0422\u0430\u043a\u043e\u0436 \u043c\u0438 \u043c\u043e\u0436\u0435\u043c\u043e \u0437\u0432\u0435\u0440\u043d\u0443\u0442\u0438 \u0443\u0432\u0430\u0433\u0443 \u043d\u0430 \u043a\u0435\u0448, \u044f\u043a\u0449\u043e \u0434\u043e\u0441\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u043c\u043e \u0443 \u0441\u0432\u043e\u0454\u043c\u0443 \u0434\u043e\u0434\u0430\u0442\u043a\u0443 UDTT, \u0449\u043e\u0431 \u0437\u043c\u0435\u043d\u0448\u0438\u0442\u0438 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0442\u0456\u0432 \u0434\u043e \u0431\u0430\u0437\u0438 \u0434\u0430\u043d\u0438\u0445 \u0434\u043b\u044f \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f UDTT. \u0426\u0435\u0439 \u043a\u043e\u0434 \u0454 \u043b\u0438\u0448\u0435 <strong>\u0437\u0430\u0433\u0430\u043b\u044c\u043d\u043e\u044e \u0456\u0434\u0435\u0454\u044e, \u043f\u043e\u043a\u043b\u0438\u043a\u0430\u043d\u043e\u044e \u043d\u0430\u0434\u0438\u0445\u043d\u0443\u0442\u0438 \u0432\u0430\u0441 \u043d\u0430 \u043f\u043e\u0434\u0430\u043b\u044c\u0448\u0456 \u0435\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438.<\/strong>\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u0412\u0438\u0441\u043d\u043e\u0432\u043e\u043a<\/strong>\u00a0<\/h2>\n\n\n\n<p>\u041f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0430 TVP \u0443 \u0432\u0430\u0448\u043e\u043c\u0443 \u0434\u043e\u0434\u0430\u0442\u043a\u0443 \u043c\u043e\u0436\u0435 \u0434\u0430\u0442\u0438 \u0441\u0443\u0442\u0442\u0454\u0432\u0456 \u043f\u0435\u0440\u0435\u0432\u0430\u0433\u0438 \u0437 \u0442\u043e\u0447\u043a\u0438 \u0437\u043e\u0440\u0443 \u0435\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0456. \u0421\u043f\u043e\u0434\u0456\u0432\u0430\u044e\u0441\u044f, \u0449\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0456\u044f \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f TVP, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 2-\u043c\u0443 \u043f\u0456\u0434\u0445\u043e\u0434\u0456, \u043f\u043e\u043b\u0435\u0433\u0448\u0438\u0442\u044c \u0432\u0430\u043c \u0436\u0438\u0442\u0442\u044f.&nbsp;<\/p>\n\n\n\n<p>\u041f\u0430\u043c\u2019\u044f\u0442\u0430\u0439\u0442\u0435, \u0449\u043e \u0445\u043e\u0447\u0430 \u0443 \u0446\u044c\u043e\u043c\u0443 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u0456 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043e SQL Server\/Azure SQL, \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0456 \u0431\u0443\u0434\u044c-\u044f\u043a\u0443 \u0456\u043d\u0448\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u0438\u0445. \u041f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u043b\u0438\u0448\u0435 \u0437\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u0430\u043f\u0438\u0442, \u044f\u043a\u0438\u0439 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0430\u0454 \u0437\u0430 \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432 UDTT \u0443 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u043e\u043c\u0443 \u043f\u043e\u0440\u044f\u0434\u043a\u0443.&nbsp;<\/p>\n\n\n\n<p><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;942&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;1&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;2&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0456\u0432 \u0437 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c \u0437 Dapper \u0432 .NET&quot;,&quot;width&quot;:&quot;159&quot;,&quot;_legend&quot;:&quot;{score}\\\/5&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 159px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            5\/5    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u042f\u043a\u0449\u043e \u0432\u0438 \u043f\u0440\u0430\u0446\u044e\u0454\u0442\u0435 \u0437 SQL Server \u0430\u0431\u043e Azure SQL, \u0432\u0438 \u043d\u0430\u043f\u0435\u0432\u043d\u043e \u0447\u0443\u043b\u0438 \u043f\u0440\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0437 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c. \u042f\u043a\u0449\u043e \u0436 \u0432\u0438 &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.ua\/blog\/vykorystannya-parametriv-z-tablychnym-znachennyam-z-dapper-v-net\/\">Continued<\/a><\/p>\n","protected":false},"author":16,"featured_media":66,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[14],"tags":[111,112,113,114,115],"class_list":["post-942","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-rozvytok-zhorstkykh-navychok","tag-net-2","tag-dapper-2","tag-sql-2","tag-table-valued-parameters-2","tag-udtt-2"],"acf":[],"aioseo_notices":[],"featured_media_url":"https:\/\/sii.ua\/blog\/wp-content\/uploads\/2023\/03\/Wykorzystanie-Table-Valued-Parameters-z-Dapperem-w-.NET_.jpg","category_names":["\u0420\u043e\u0437\u0432\u0438\u0442\u043e\u043a \"\u0416\u043e\u0440\u0441\u0442\u043a\u0438\u0445\" \u043d\u0430\u0432\u0438\u0447\u043e\u043a"],"_links":{"self":[{"href":"https:\/\/sii.ua\/blog\/wp-json\/wp\/v2\/posts\/942"}],"collection":[{"href":"https:\/\/sii.ua\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.ua\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.ua\/blog\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.ua\/blog\/wp-json\/wp\/v2\/comments?post=942"}],"version-history":[{"count":1,"href":"https:\/\/sii.ua\/blog\/wp-json\/wp\/v2\/posts\/942\/revisions"}],"predecessor-version":[{"id":944,"href":"https:\/\/sii.ua\/blog\/wp-json\/wp\/v2\/posts\/942\/revisions\/944"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.ua\/blog\/wp-json\/wp\/v2\/media\/66"}],"wp:attachment":[{"href":"https:\/\/sii.ua\/blog\/wp-json\/wp\/v2\/media?parent=942"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.ua\/blog\/wp-json\/wp\/v2\/categories?post=942"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.ua\/blog\/wp-json\/wp\/v2\/tags?post=942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}