简体   繁体   English

从C#调用存储过程

[英]Call stored procedure from c#

I created a test application with Thread and call stored procedure. 我使用Thread创建了一个测试应用程序,并调用了存储过程。 If I call stored procedure from console application stored procedure executes, but does not insert values into test table. 如果从控制台应用程序调用存储过程,则存储过程会执行,但不会将值插入测试表中。 I'm using a DbContext . 我正在使用DbContext If I call procedure in SQL Server Management Studio then value adds to test table. 如果我在SQL Server Management Studio中调用过程,那么值会添加到测试表中。 Where is error? 错误在哪里?

My console application for thread call stored procedure: 我的控制台应用程序用于线程调用存储过程:

 static void Main(string[] args)
            {
             ModelContext context = new ModelContext();
             Thread t = new Thread(() => ThreadTestProcedure(context));
             t.Start();
    }

Thread call method: 线程调用方法:

 private static void ThreadTestProcedure(ModelContext сontext)
            {
                try
                {                
                        context.RunTestProcedure(1000, "Test")
                }
                catch (Exception ex)
                {

                }

                Console.WriteLine();
                Console.ReadKey();
            }

My stored procedure for insert values to test table: 我向测试表插入值的存储过程:

CREATE PROCEDURE TestProcedure
   @Int1 INT,
   @SrtingValue nvarchar(250)
AS        
   IF NOT EXISTS (SELECT * FROM sys.objects 
                   WHERE object_id = OBJECT_ID(N'[dbo].[ASSIGNMENTS_DELETED]') 
                   AND type in (N'U'))
   BEGIN
      CREATE TABLE ASSIGNMENTS_DELETED
             (ID INT PRIMARY KEY (ID) identity(1,1),
              Assigment int, 
              StringValue nvarchar(250)
             )   
   END 

   WHILE 1=1 
   BEGIN
      BEGIN TRY
      BEGIN TRANSACTION
          insert into ASSIGNMENTS_DELETED
             select @Int1, @SrtingValue            

          COMMIT TRANSACTION
     END TRY
     BEGIN CATCH
          IF XACT_STATE() <> 0 
              ROLLBACK TRANSACTION
          RAISERROR ('it broke', 16, 1)
     END CATCH
 END

Your stored procedure has an infinite loop WHILE 1=1 ??? 您的存储过程有一个无限循环,WHILE 1 = 1 ??? remove that. 删除。

Remove WHILE 1=1 from your stored procedure. 从存储过程中删除WHILE 1=1 It goes in infinite loop. 它进入无限循环。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM