Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mendapatkan Kesalahan:Kesalahan mengonversi tipe data nvarchar ke numerik dalam SQL

Biasanya tidak masalah untuk melewatkan string ke parameter numerik, selama SQL Server mampu mengonversi konten string menjadi nilai numerik itu sendiri. Jika tidak berhasil, Anda mendapatkan kesalahan ini.

Misalnya:Melewati "Hello" ke parameter yang numerik, Anda mendapatkan kesalahan. Melewati "1234" Anda tidak. Harap dicatat bahwa string kosong atau string yang berisi spasi tidak dapat dikonversi ke nilai numerik!

Namun, harus dikatakan bahwa itu bukan gaya yang baik untuk melakukan itu. Anda harus memastikan bahwa jenis yang Anda gunakan dalam aplikasi Anda cocok dengan jenis dalam database untuk menghindari masalah. Mungkin beberapa detail lebih lanjut tentang mengapa Anda perlu memiliki string jenis dalam aplikasi Anda dapat membantu.

EDIT 1
Untuk membuat parameter opsional untuk kueri, caranya adalah sebagai berikut:

  1. Ubah pernyataan SQL Anda untuk mengizinkan parameter opsional seperti WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) .
  2. Jangan tambahkan @Raumklasse_ID parameter jika harus opsional atau tambahkan nilai DBNull.Value

Anda harus benar-benar mempertimbangkan untuk mengubah string properties ke tipe nullable seperti int? .

EDIT 2
Beginilah tampilan kode Anda saat menerapkan perubahan yang saya sarankan di Edit 1:

using (SqlCommand cmd = new SqlCommand(@"SELECT r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID FROM RAUM r WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) OR STADT_ID = ISNULL(@Stadt_ID, STADT_ID) OR GEBAEUDE_ID = ISNULL(@Gebaeude_ID, GEBAEUDE_ID) OR REGION_ID = ISNULL(@Region_ID, REGION_ID)", con)) 
{
    con.Open();
    if (!String.IsNullOrWhitespace(RAUMKLASSE_ID))
        cmd.Parameters.AddWithValue("@Raumklasse_ID", RAUMKLASSE_ID);
    else
        cmd.Parameters.AddWithValue("@Raumklasse_ID", DBNull.Value);
    if (!String.IsNullOrWhitespace(STADT_ID))
        cmd.Parameters.AddWithValue("@Stadt_ID", STADT_ID);
    else
        cmd.Parameters.AddWithValue("@Stadt_ID", DBNull.Value);
    if (!String.IsNullOrWhitespace(GEBAEUDE_ID))
        cmd.Parameters.AddWithValue("@Gebaeude_ID", GEBAEUDE_ID);
    else
        cmd.Parameters.AddWithValue("@Gebaeude_ID", DBNull.Value);
    if (!String.IsNullOrWhitespace(REGION_ID))
        cmd.Parameters.AddWithValue("@Region_ID", REGION_ID);
    else
        cmd.Parameters.AddWithValue("@Region_ID", DBNull.Value);
    ...
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masukkan beberapa baris dengan parameter Sql Server

  2. Putaran .NET DateTime milidetik, sehingga dapat memuat milidetik SQL Server

  3. Kepatuhan GDPR dan SQL Server Anda

  4. Apa representasi internal dari datetime di sql server?

  5. Bagaimana saya bisa mendapatkan 12 bulan terakhir dari tanggal saat ini PLUS hari ekstra hingga tanggal 1 bulan terakhir diambil