如何在C#中创建存储过程,然后将其*保存*到SQL Server?
在这件事上我已经把头撞在墙上有一段时间了。我知道你可以用C代码创建一个存储过程,这一点没问题。但我不明白的是,我是否可以将该存储过程保存到SQL Server上——但通过C#代码完成如何在C#中创建存储过程,然后将其*保存*到SQL Server?,c#,sql,sql-server,stored-procedures,C#,Sql,Sql Server,Stored Procedures,在这件事上我已经把头撞在墙上有一段时间了。我知道你可以用C代码创建一个存储过程,这一点没问题。但我不明白的是,我是否可以将该存储过程保存到SQL Server上——但通过C#代码完成 场景是:我想通过代码创建一个测试数据库,然后我想向新创建的测试数据库(服务器端)添加一个存储过程——同样,所有操作都是通过相同的C代码项目完成的。是。在字符串中使用通常的CREATE PROCEDURE文本,然后通过一个SqlCommand执行它,前提是用户当然有存储过程的权限。请阅读,因为它有一些有关创建存储过程
场景是:我想通过代码创建一个测试数据库,然后我想向新创建的测试数据库(服务器端)添加一个存储过程——同样,所有操作都是通过相同的C代码项目完成的。是。在字符串中使用通常的
CREATE PROCEDURE
文本,然后通过一个SqlCommand执行它,前提是用户当然有存储过程的权限。请阅读,因为它有一些有关创建存储过程中经常使用的GO
和USE
的详细信息(在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();
}
}
为什么不在SQL中执行此操作?问题是如何在C代码中创建CLR存储过程,而不是如何通过C代码创建T-SQL产品。@Frederikheysels引用了最初的问题:“……然后我可以将该存储过程保存到SQL Server上吗?但可以通过C代码执行吗?”我认为他指的是CLR存储过程:肯定是更好的答案,尽管这需要EntityFramework,对吗?