如何在 C# 中创建存储过程,然后将其*保存*到 SQL Server
本文关键字:保存 Server SQL 然后 存储过程 创建 | 更新日期: 2023-09-27 18:31:40
在这个问题上,我已经把头撞在墙上一段时间了。我知道你可以用 C# 代码创建一个存储过程,那位没问题。但是我无法弄清楚的是,我是否可以将该存储过程保存到SQL Server上 - 但通过C#代码完成?
场景是:我想通过代码创建一个测试数据库,然后我想将存储过程添加到新创建的测试数据库(服务器端) - 同样,所有这些都是通过同一个 C# 代码项目完成的。
是的,这是可能的。在这里,我给你一个示例。
public partial class InitialEntities : DbMigration
{
public override void Up()
{
CreateStoredProcedure(
"dbo.InsertEmployee",
p => new
{
Code = p.String(),
Name = p.String(),
DepartmentId = p.Int(),
},
body:
@"INSERT [dbo].[EmployeeMasters]([Code], [Name], [DepartmentId])
VALUES (@Code, @Name, @DepartmentId)
DECLARE @EmployeeId int
SELECT @EmployeeId = [EmployeeId]
FROM [dbo].[EmployeeMasters]
WHERE @@ROWCOUNT > 0 AND [EmployeeId] = scope_identity()
SELECT t0.[EmployeeId]
FROM [dbo].[EmployeeMasters] AS t0
WHERE @@ROWCOUNT > 0 AND t0.[EmployeeId] = @EmployeeId"
);
CreateStoredProcedure(
"dbo.UpdateEmployee",
p => new
{
EmployeeId = p.Int(),
Code = p.String(),
Name = p.String(),
DepartmentId = p.Int(),
},
body:
@"UPDATE [dbo].[EmployeeMasters]
SET [Code] = @Code, [Name] = @Name, [DepartmentId] = @DepartmentId
WHERE ([EmployeeId] = @EmployeeId)"
);
CreateStoredProcedure(
"dbo.DeleteEmployee",
p => new
{
EmployeeId = p.Int(),
},
body:
@"DELETE [dbo].[EmployeeMasters]
WHERE ([EmployeeId] = @EmployeeId)"
);
}
public override void Down()
{
DropStoredProcedure("dbo.DeleteEmployee");
DropStoredProcedure("dbo.UpdateEmployee");
DropStoredProcedure("dbo.InsertEmployee");
}
}
没有实体框架
StringBuilder sbSP = new StringBuilder();
sbSP.AppendLine("CREATE PROCEDURE [spInsertADAuthorization] @AD_Account varchar(255),@AD_SID varchar(255),@AD_EmailAddress varchar(255),@DateImported datetime,@Active bit AS BEGIN SET NOCOUNT ON; INSERT INTO AD_Authorization (AD_Account, AD_SID, AD_EmailAddress, DateImported, Active) VALUES (@AD_Account,@AD_SID,@AD_EmailAddress,@DateImported,@Active) END");
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(sbSP.ToString(), connection))
{
connection.Open();
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
connection.Close();
}
}
使用实体框架通过 C# 创建存储过程
通过 C# 创建没有实体框架的存储过程
是的。您在字符串中使用通常的CREATE PROCEDURE
文本,然后通过 SqlCommand 执行它,前提是用户当然有权存储过程。阅读另一个答案,因为它有一些关于GO
和USE
的细节,这些细节通常用于创建 sprocs(并且会在 C# 中给您带来麻烦)