小编the*_*rer的帖子

Dapper/SQL Server - get output from Stored Procedure containing Insert and Select statements

I just started learning Dapper in C# but I am having difficulty in executing stored procedures with two or more SQL Statements in one transaction.

How do you get the output parameter of a Stored Procedure that contains both Insert and Select statements in C# using Dapper?

Here is my stored procedure:

ALTER PROCEDURE [dbo].[AddToFileDetailsAndGetPrimaryKey] 

-- 1. declare input variables
@file_name NVARCHAR(100) = NULL,

-- 2. declare output variable
@file_details_pk UNIQUEIDENTIFIER OUTPUT

AS

-- 3. instantiate holder table
DECLARE @pk_holder …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server dapper

4
推荐指数
1
解决办法
7348
查看次数

在存储过程中使用 CASE 语句

我有一个存储过程,它根据指定的输入参数调用其他存储过程。

它看起来是这样的:

CREATE PROCEDURE dbo.usp_SPCaller
@Input_Param1 NVARCHAR(100) = NULL,
@Input_Param2 NVARCHAR(100) = NULL

AS
BEGIN
SET NOCOUNT ON    

IF ((@Input_Param1 IS NOT NULL) AND (@Input_Param2 IS NOT NULL))
   BEGIN
       EXEC dbo.usp_SPWithParam1And2
   END 

IF ((@Input_Param1 IS NOT NULL) AND (@Input_Param2 IS NULL))
   BEGIN
       EXEC dbo.usp_SPWithParam1Only
   END

IF ((@Input_Param1 IS NULL) AND (@Input_Param2 IS NOT NULL))
   BEGIN
       EXEC dbo.usp_SPWithParam2Only
   END

IF ((@Input_Param1 IS NULL) AND (@Input_Param2 IS NULL))
   BEGIN
       EXEC dbo.usp_SPWithoutParam1And2
   END
Run Code Online (Sandbox Code Playgroud)

在向我们的领导介绍这一点后,他建议我改用 CASE 语句,因为使用 IF 语句是一个坏主意。

我尝试到处搜索如何以与上面相同的格式使用案例陈述,但无济于事。我发现的只是将 CASE STATMENTS 与 UPDATE …

sql t-sql sql-server stored-procedures

4
推荐指数
1
解决办法
4万
查看次数

C#-在TextBox上使用Async和Await的跨线程错误

我是Async和Await的新手,并且创建了一个简单的项目以了解其工作原理。为此,我有一个简单的Windows Form应用程序,其中包含2个元素:

  • 获取完成的项目按钮
  • 显示所有已检索到的已完成项目的文本框

当我单击按钮时,它应该在文本框中显示所有已完成的项目。这是我编写的代码:

private async void btnGetCompletedItems_Click(object sender, EventArgs e)
{
    QueueSystem queueSystem = QueueSystem.NewInstance(75);

    Stopwatch watch = new Stopwatch();

    watch.Start();
    await Task.Run(() => GetCompletedItems(queueSystem));
    watch.Stop();

    lblTime.Text = $"{watch.ElapsedMilliseconds.ToString()} ms";

}

private void GetCompletedItems(QueueSystem queueSystem)
{
    foreach (var item in queueSystem.GetCompletedItems())
    {
        txtItems.Text += $"{txtItems.Text}{item.ItemKey}{Environment.NewLine}";
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我在

txtItems.Text + = $“ {txtItems.Text} {item.ItemKey} {Environment.NewLine}”;

错误说

附加信息:跨线程操作无效:控制'txtItems'是从不是在其上创建线程的线程访问的。

我检查了Debug,并为GetCompletedItems()创建了一个新线程。当我阅读有关Async和Await的文章时,我读到它不一定创建一个新线程,但是由于某种原因它似乎创建了一个新线程。

我对Async和Await的实现和理解错了吗?是否可以在Windows Forms应用程序中使用Async和Await?

c# multithreading asynchronous winforms async-await

3
推荐指数
1
解决办法
1115
查看次数

SQL Server - storing SELECT statement into a variable in a Stored Procedure

In my Stored Procedure, I am trying to store the result of a SELECT statement inside a variable. This is what I have so far:

DECLARE @process_pk uniqueidentifier
INSERT INTO @process_pk
    SELECT process_pk 
    FROM dbo.Process 
    WHERE process_id = @process_id
Run Code Online (Sandbox Code Playgroud)

In the above, I'm trying to store the result of the SELECT statement into my variable @process_pk, to be used sometime later in the latter part of my stored procedure. But it doesn't seem to be the correct syntax.

I …

sql sql-server

2
推荐指数
1
解决办法
6507
查看次数