簡體   English   中英

SQL查詢在SQL Server和C#中不會返回相同的結果

[英]SQL query doesn't return the same result in SQL Server and in C#

我在兩個不同的環境中啟動了查詢:

  • Microsoft SQL Server管理工作室
  • C#(.Net Core 2.2.1)

查詢:

SELECT
    CASE 
       WHEN afc.Id IS NULL 
          THEN fcv.Id 
          ELSE afc.ParentTemplateFieldContainerId 
    END AS FieldContainerId,
    fcv.TemplateFieldContainerId,
    CASE 
       WHEN fcvp.ProductId IS NULL 
          THEN '00000000-0000-0000-0000-000000000000' 
          ELSE fcvp.ProductId 
    END AS ProductId
FROM 
    FieldContainerValue fcv
LEFT JOIN
    FieldContainerValueAndProduct fcvp ON fcvp.FieldContainerValueId = fcv.Id
LEFT JOIN
    ArrayFieldContainer afc ON afc.ChildTemplateFieldContainer = fcv.Id
WHERE 
    fcv.Id IN ('337c0b2e-a83b-4014-a46a-6ce8bf9fd2c4', 'c2ca899c-28ac-4dc3-bba9-f0741bb02097')

我用來在C#中運行查詢的代碼:

public IEnumerable<T> QuerySql<T> (string sql)
{
    using (var conn = new SqlConnection(ConfigMan.GetConfigProperty("ConnectionString")))
    {
        conn.Open();
        conn.EnlistTransaction(Transaction.Current);
        return conn.Query<T>(sql);
    }
}

SQL是查詢。

我的查詢返回的類型:

public class FieldContainerValueProperties
{
    public Guid FieldContainerValueId { get; set; }
    public Guid TemplateFieldContainerId { get; set; }
    public Guid ProductId { get; set; }
}

查詢的結果:在兩種情況下,我得到相同數量的項目(2),但FieldContainerId不同。

在SQL Server Management Studio中:

[
    {
        "FieldContainerId": "337C0B2E-A83B-4014-A46A-6CE8BF9FD2C4",
        "TemplateFieldContainerId": "B4566675-B547-4025-ABBB-F5CC523BB092",
        "ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
    },
    {
        "FieldContainerId": "C2CA899C-28AC-4DC3-BBA9-F0741BB02097",
        "TemplateFieldContainerId": "591D8371-EDE8-460C-9847-3F2963D875D2",
        "ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
    }
]

從C#:

[
    {
        "FieldContainerId": "00000000-0000-0000-0000-000000000000",
        "TemplateFieldContainerId": "B4566675-B547-4025-ABBB-F5CC523BB092",
        "ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
    },
    {
        "FieldContainerId": "00000000-0000-0000-0000-000000000000",
        "TemplateFieldContainerId": "591D8371-EDE8-460C-9847-3F2963D875D2",
        "ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
    }
]

可能的解釋?

我可以想象的一個可能的解釋是,在一種情況下is null返回true ,在另一種情況下為false ,但是我不確定。

如果確實如此,您知道什么可能導致此問題嗎?

您的映射無法正常工作。 您的模型類包含FieldContainerValueId和sql表FieldContainerId因此當其映射字段名稱時,將其設置為默認值。 更改您的模型類FieldContainerValueId > FieldContainerId 新模式會很好用,

public class FieldContainerValueProperties
{
    public Guid FieldContainerId { get; set; }
    public Guid TemplateFieldContainerId { get; set; }
    public Guid ProductId { get; set; }
}

**我已經在評論部分回答了這個問題。 寫這里只是為了讓帖子得到一個已解決的答案。

暫無
暫無

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

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