Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中创建存储过程,然后将其*保存*到SQL Server?_C#_Sql_Sql Server_Stored Procedures - Fatal编程技术网

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

如何在C#中创建存储过程,然后将其*保存*到SQL Server?,c#,sql,sql-server,stored-procedures,C#,Sql,Sql Server,Stored Procedures,在这件事上我已经把头撞在墙上有一段时间了。我知道你可以用C代码创建一个存储过程,这一点没问题。但我不明白的是,我是否可以将该存储过程保存到SQL Server上——但通过C#代码完成 场景是:我想通过代码创建一个测试数据库,然后我想向新创建的测试数据库(服务器端)添加一个存储过程——同样,所有操作都是通过相同的C代码项目完成的。是。在字符串中使用通常的CREATE PROCEDURE文本,然后通过一个SqlCommand执行它,前提是用户当然有存储过程的权限。请阅读,因为它有一些有关创建存储过程

在这件事上我已经把头撞在墙上有一段时间了。我知道你可以用C代码创建一个存储过程,这一点没问题。但我不明白的是,我是否可以将该存储过程保存到SQL Server上——但通过C#代码完成


场景是:我想通过代码创建一个测试数据库,然后我想向新创建的测试数据库(服务器端)添加一个存储过程——同样,所有操作都是通过相同的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,对吗?