如何在 C# 中创建存储过程,然后将其*保存*到 SQL Server

本文关键字:保存 Server SQL 然后 存储过程 创建 | 更新日期: 2023-09-27 18:31:40

在这个问题上,我已经把头撞在墙上一段时间了。我知道你可以用 C# 代码创建一个存储过程,那位没问题。但是我无法弄清楚的是,我是否可以将该存储过程保存到SQL Server上 - 但通过C#代码完成?

场景是:我想通过代码创建一个测试数据库,然后我想将存储过程添加到新创建的测试数据库(服务器端) - 同样,所有这些都是通过同一个 C# 代码项目完成的。

如何在 C# 中创建存储过程,然后将其*保存*到 SQL Server

是的,这是可能的。在这里,我给你一个示例。

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 执行它,前提是用户当然有权存储过程。阅读另一个答案,因为它有一些关于GOUSE的细节,这些细节通常用于创建 sprocs(并且会在 C# 中给您带来麻烦)