尝试使用 C# 和 MS SQL 用户定义表类型一次性将批量记录插入数据库

问题描述 投票:0回答:1

下面我写了C#代码和SQL代码;我遇到了一次在数据库中插入多条记录的场景,所以我尝试了下面的方法,但它在我的 MVC C# 中不起作用,但当我从 SQL Server 手动触发查询时它就起作用了。我在下面给出了带有虚拟记录的代码。

try
{
       var dataTable = new DataTable();
       dataTable.Columns.Add("Name", typeof(string));
       dataTable.Columns.Add("City", typeof(string));
       dataTable.Columns.Add("Age", typeof(string));

       dataTable.Rows.Add("ABC", "Mumbai", "24");
       dataTable.Rows.Add("DEF", "Nasik", "30");
       dataTable.Rows.Add("GHI", "Ahmedabad", "26");

       var ItemValues = dataTable.AsTableValuedParameter("dbo.typList");

       using(var con = new SqlConnection(GetConnectionString()))
       {
           var output = con.Query<bool>("Usp_BulkInsert", ItemValues, commandType: CommandType.StoredProcedure, commandTimeout: 1000).SingleOrDefault();
       }
}

下面是我的 SQL 存储过程和用户定义表类型。

存储过程:

CREATE PROC [dbo].[Usp_BulkInsert] @ItemValues typList READONLY
--- Here i am assign User_Define_Table_Type to Variable and making it readonly
AS BEGIN
    BEGIN TRY
        BEGIN TRANSACTION;
        INSERT INTO EmployeeDetails (Name,
                                     City,
                                     Age)
        SELECT Name,
               City,
               Age
        FROM @ItemValues; -- Here i am Select Records from User_Define_Table_Type
        COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        IF (@@Trancount > 0)
            ROLLBACK TRANSACTION;
    END CATCH;
--select 1
END;


类型:

CREATE TYPE [dbo].[typList] AS TABLE(
    [Name] [varchar](100) NULL,
    [City] [varchar](100) NULL,
    [Age] [varchar](100) NULL
)

下面是我手动触发的查询,以检查存储过程的工作情况和工作正常的类型。

DECLARE @typList  AS typList
 
INSERT INTO @typList VALUES ( 'ABC', 'Mumbai','24')
INSERT INTO @typList VALUES ( 'DEF', 'Nasik','30')
INSERT INTO @typList VALUES ( 'GHI', 'Aurnagabad','28')

    
    
EXECUTE Usp_BulkInsert @typList
c# sql sql-server asp.net-mvc dapper
1个回答
0
投票

但它不起作用

如果没有比“不工作”更多的细节,很难有信心,但我可以合理地推测,这里的问题就像在你应该使用

.Query<T>(...)
时使用
.Execute(...)
一样简单 - 因为这不是一个查询。

© www.soinside.com 2019 - 2024. All rights reserved.