簡體   English   中英

使用來自 C#/Dapper 的可選/條件參數更新 SqlSever

[英]Update SqlSever with optional/condition parameters from C#/Dapper

我有一個應用程序,我從 API 獲取數據並將其發送到我的 SQL 服務器數據庫。 有時我只想用新數據從我的應用程序更新數據庫中的某一列。

這是我在應用程序中運行的代碼,用於立即發送數據

public void TestinPE(long? instID, float? Value)
{
    using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Helper.CnnVal("BorsdataDB")))
    {
        //Person newPerson = new Person { ModelName = Variable, LastName = lastName, EmailAddress = emailAddress, PhoneNumber = phoneNumber };
        List<KpiReturn> updateKpi = new List<KpiReturn>();
        updateKpi.Add(new KpiReturn { instID = instID, psValue = Value });
        connection.Execute("dbo.UpdateRec @instID,@psValue", updateKpi);
    }
}

我調用的程序看起來像這樣

ALTER PROCEDURE [dbo].[UpdateRec]
    @instID int,
    @psValue float = null,
    @peValue float = null
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE StockData
    SET peValue = ISNULL(@peValue, peValue), 
        psValue = ISNULL(@psValue, psValue)
    WHERE instID = @instID
END

現在假設我想更新psValue它工作得很好,但是如果我改為嘗試更新peValue ,我將我的 C# 代碼更改為

updateKpi.Add(new KpiReturn { instID = instID, peValue = Value });
connection.Execute("dbo.UpdateRec @instID,@peValue", updateKpi);

我的psValue服務器中的 psValue 更新,在這種情況下它總是更新查詢中的第一個參數@psValue float = null

如果我在 SQL 中運行查詢,它工作正常,如下所示,它忽略psValue ,但更新peValue 但是我可以在嘗試從 C# 傳遞參數時實現這一點

exec dbo.UpdateRec @instID = 2, @peValue = 500

對我有什么提示嗎?

如果我在 SQL 中運行查詢,它工作正常,如下所示,它忽略 psValue,但更新 peValue。 但是我可以在嘗試從 C# 傳遞參數時實現這一點

exec dbo.UpdateRec @instID = 2, @peValue = 500

這些代碼片段按序號而不是名稱傳遞參數值,因此無論提供的參數名稱如何,proc 代碼都會將值視為@instID@psValue

updateKpi.Add(new KpiReturn { instID = instID, psValue = Value });
connection.Execute("dbo.UpdateRec @instID,@psValue", updateKpi);

updateKpi.Add(new KpiReturn { instID = instID, peValue = Value });
connection.Execute("dbo.UpdateRec @instID,@peValue", updateKpi);

修復它的一種方法是使用命名參數語法而不是序號方法,類似於您在 SSMS 中運行的腳本:

updateKpi.Add(new KpiReturn { instID = instID, psValue = Value });
connection.Execute("dbo.UpdateRec @instID=@instID, @psValue=@psValue", updateKpi);

updateKpi.Add(new KpiReturn { instID = instID, peValue = Value });
connection.Execute("dbo.UpdateRec @instID=@instID, @peValue=@peValue", updateKpi);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM