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

我一直在这个墙上撞了一会儿。 我知道你可以用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"); } } 

没有entity framework

  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(); } } 

使用entityframework通过C#创建存储过程

通过C#创建存储过程而不使用entityframework

是。 您在字符串中使用通常的CREATE PROCEDURE文本,然后通过SqlCommand执行它,因为用户当然有权存储过程。 阅读这个其他答案,因为它有一些关于GOUSE细节,这些细节通常用于创建sprocs(并且会在C#中给你带来麻烦)