Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Xử lý ExecuteScalar () khi không có kết quả nào được trả về

Theo tài liệu MSDN cho DbCommand.ExecuteScalar:

Nếu không tìm thấy cột đầu tiên của hàng đầu tiên trong tập kết quả, thì tham chiếu rỗng (Không có gì trong Visual Basic) được trả về. Nếu giá trị trong cơ sở dữ liệu là null, truy vấn trả về DBNull.Value.

Hãy xem xét đoạn mã sau:

using (var conn = new OracleConnection(...)) {
    conn.Open();
    var command = conn.CreateCommand();
    command.CommandText = "select username from usermst where userid=2";
    string getusername = (string)command.ExecuteScalar();
}

Tại thời điểm chạy (được thử nghiệm trong ODP.NET nhưng phải giống với bất kỳ nhà cung cấp ADO.NET nào), nó hoạt động như sau:

  • Nếu hàng không tồn tại, kết quả của command.ExecuteScalar() là null, sau đó được chuyển thành chuỗi null và được gán cho getusername .
  • Nếu hàng tồn tại, nhưng có NULL trong tên người dùng (thậm chí điều này có thể xảy ra trong DB của bạn?), kết quả của command.ExecuteScalar()DBNull.Value , dẫn đến InvalidCastException .

Trong mọi trường hợp, NullReferenceException không thể, vì vậy vấn đề của bạn có thể nằm ở chỗ khác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:tính duy nhất chọn lọc chỉ mục dựa trên hàm

  2. Trục động trong sql oracle

  3. Gợi ý Oracle WITH và MATERIALIZE hoạt động như một giao dịch tự trị cho các hàm

  4. Làm thế nào để sử dụng enums trong Oracle?

  5. Làm cách nào để tạo cơ sở dữ liệu mới sau khi cài đặt ngay cơ sở dữ liệu oracle 11g Express Edition?