下面我写了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
但它不起作用
如果没有比“不工作”更多的细节,很难有信心,但我可以合理地推测,这里的问题就像在你应该使用
.Query<T>(...)
时使用.Execute(...)
一样简单 - 因为这不是一个查询。