【问题标题】:Call stored procedure from c#从 C# 调用存储过程
【发布时间】:2013-12-24 08:40:20
【问题描述】:

我使用 Thread 创建了一个测试应用程序并调用存储过程。如果我从控制台应用程序调用存储过程,存储过程将执行,但不会将值插入测试表。我正在使用DbContext。如果我在 SQL Server Management Studio 中调用过程,则值会添加到测试表中。哪里出错了?

我的线程调用存储过程的控制台应用程序:

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

线程调用方法:

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

                }

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

我将值插入测试表的存储过程:

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

【问题讨论】:

  • 我也是映射存储过程并调用存储过程: context.Database.ExecuteSqlCommand(string.Format("exec TestProcedure @id, @value", id, value), new SqlParameter(" id", id), new SqlParameter("value", value));但也不插入值

标签: c# stored-procedures entity-framework-5


【解决方案1】:

您的存储过程有一个无限循环 WHILE 1=1 ???删除它。

【讨论】:

  • 我需要很长时间执行存储过程
  • 这将是一个非常长的时间......为什么不使用循环,你可以调整它运行多长时间 WHILE (SELECT COUNT(ID) FROM [dbo].[ASSIGNMENTS_DELETED])
【解决方案2】:

从您的存储过程中删除WHILE 1=1。它进入无限循环。

【讨论】:

    猜你喜欢
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2011-03-08
    相关资源
    最近更新 更多