Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengendalikan Nilai Null dalam SQL SUM() untuk Mengelakkan Ralat 'The Cast to Value Type 'Int32' Failed'?

Bagaimana untuk Mengendalikan Nilai Null dalam SQL SUM() untuk Mengelakkan Ralat 'The Cast to Value Type 'Int32' Failed'?

DDD
Lepaskan: 2025-01-10 20:36:42
asal
241 orang telah melayarinya

How to Handle Null Values in SQL SUM() to Avoid

Pengecualian SQL: 'Tidak boleh menukar kepada jenis nilai 'Int32''

Dalam pertanyaan SQL anda, anda cuba mengira jumlah lajur CreditHistory dalam jadual Amount untuk pengguna tertentu. Walau bagaimanapun, apabila tiada rekod untuk pengguna tersebut dalam jadual CreditHistory, anda mendapat ralat: "Tidak boleh menukar kepada jenis nilai 'Int32' kerana nilai terwujud adalah batal". Ini kerana SQL SUM() mengembalikan nilai nullable apabila data asas mengandungi nilai null, manakala C# menjangkakan jenis int yang tidak boleh dibatalkan dalam hasil anda.

Untuk mengendalikan nilai nol dalam pertanyaan dan menghalang ralat ini, anda boleh menggunakan beberapa teknik:

  1. Gunakan DefaultIfEmpty:

    Ubah suai pertanyaan anda untuk menggunakan Sum() sebelum memohon DefaultIfEmpty(0). Ini memastikan bahawa jika rekod tidak ditemui, keputusan lalai kepada sifar dan bukannya kosong:

    <code class="language-csharp">var creditsSum = (from u in context.User
                      join ch in context.CreditHistory on u.ID equals ch.UserID
                      where u.ID == userID
                      select ch.Amount).DefaultIfEmpty(0).Sum();</code>
    Salin selepas log masuk
  2. Gunakan jenis data nullable:

    Tukar jenis lajur CreditHistory dalam jadual Amount kepada jenis nullable, seperti int?. Ini membolehkan pertanyaan anda mengembalikan nilai nol:

    <code class="language-csharp">var creditsSum = (from u in context.User
                      join ch in context.CreditHistory on u.ID equals ch.UserID
                      where u.ID == userID
                      select ch.Amount).Sum(); // Sum() will now handle nulls correctly
    ```  或者更简洁的写法:
    
    ```csharp
    var creditsSum = (from u in context.User
                      join ch in context.CreditHistory on u.ID equals ch.UserID
                      where u.ID == userID
                      select ch.Amount).Sum() ?? 0; // 使用null-coalescing operator</code>
    Salin selepas log masuk
  3. Gunakan COALESCE:

    Gunakan fungsi COALESCE untuk menggantikan nilai nol dengan nilai yang ditentukan. Dalam contoh ini, anda boleh menggunakan ISNULL(ch.Amount, 0) atau COALESCE(ch.Amount, 0) untuk menyemak nilai nol dan menggantikannya dengan sifar dalam pernyataan SQL:

    <code class="language-sql">SELECT ISNULL(SUM(Amount), 0) AS CreditsSum
    FROM CreditHistory
    WHERE UserID = @userID;</code>
    Salin selepas log masuk

    Kemudian terima hasilnya terus dalam C#.

Dengan menggunakan teknik ini, anda boleh mengendalikan nilai nol dalam pertanyaan dengan cekap dan mengelakkan ralat "tidak boleh menukar kepada jenis nilai". Kaedah yang anda pilih bergantung pada keutamaan dan sistem pangkalan data anda. Kaedah 2 dan 3 mengendalikan nilai nol lebih terus pada bahagian pangkalan data, manakala Kaedah 1 mengendalikannya di bahagian C#.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Nilai Null dalam SQL SUM() untuk Mengelakkan Ralat 'The Cast to Value Type 'Int32' Failed'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan