Trang 1 trên tổng số 8 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 74 kết quả

Đề tài: Lỗi: Object reference not set to an instance of an object trong lập trình C# - Nguyên nhân và cách khắc phục

  1. #1
    Ngày gia nhập
    11 2008
    Nơi ở
    An Giang
    Bài viết
    502

    Mặc định Lỗi: Object reference not set to an instance of an object trong lập trình C# - Nguyên nhân và cách khắc phục

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		untitled.JPG
Lần xem:	556
Size:		22.9 KB
ID:		7872

    Trong quá trình code của các bạn sẽ ko ít lần gặp trường hợp lỗi như trên.Sau đây mình xin đưa ra các trường hợp gặp lỗi như thế và cách khắc phục nó.
    1.Lỗi chưa khởi tạo đối tượng (Lỗi này phổ biến nhất).
    Ví dụ các bạn chỉ khai báo như sau.
    ArrayList arr;
    Sau đó sử dụng biến arr để thêm các đối tượng vào mảng.
    arr.Add("test");//Tại đây chương trình sẽ thông báo lỗi
    Cách giải quyết lỗi trên là các bạn phải new(khởi tạo đối tượng)
    ArrayList arr = new ArrayList;

    2.Lỗi về duyệt từng dòng trong DataGridView và lấy ra giá trị của dòng đó.
    Các bạn duyệt từng dòng trong DataGridView bằng vòng lặp For như sau sẽ bị lỗi.
    for (int i = 0; i < dataGridView1.RowCount ; i++)
    //Và lấy giá trị của dòng thứ i để làm việc gì đó, thì tại đây nó sẽ bị lỗi.
    Cách giải quyết là trong lúc duyệt thì bạn chỉ được duyệt với số lượng RowCount - 1 mà thôi.
    Nếu các bạn duyệt bằng vòng lặp foreach mà gặp lỗi như trên thì các bạn xem lại thuộc tính AlowUserToAddRows sữa nó lại là False.

    3.Lấy giá trị trả về từ CSDL bằng phương thức ExecuteScalar.
    Visual C# Code:
    1.             SqlConnection con = this.GetCon();
    2.             con.Open();
    3.             SqlCommand cmd = new SqlCommand("SELECT Ten FROM TONG_QUAT WHERE Ma = 1000", con);
    4.             string s =cmd.ExecuteScalar().ToString();//Chương trình sẽ báo lỗi tại đây
    Với trường hợp này thì bạn hãy kiểm trả câu truy vấn xem có giá trị trả về không?Như ở trên thì với điểu kiện Ma = 1000 thì không có record nào thỏa mãn được.

    4.Lỗi khi đỗ dữ liệu vào DataSet.
    Visual C# Code:
    1.             SqlConnection con = this.GetCon();
    2.             con.Open();
    3.             SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM TONG_QUAT",con);
    4.             DataSet ds = new DataSet();
    5.             da.Fill(ds,"table");
    6.             DataTable table = ds.Tables["test"];//Tại đây biến table có giá trị là null vì ko thấy Table nào có tên là "test".
    7. //Và chương trình sẽ báo lỗi khi bạn dùng biến table để làm việc gì đó.
    8. int count = table.Rows.Count;//Báo lỗi ở đây
    Cách giải quyết vấn đề trên:
    - Kiểm tra câu truy vấn có record nào trả về hay không?
    - Nếu các bạn dùng DataSet thì lúc Fill và DataSet nếu có đặt tên cho Table thì phải nhớ.Nếu không nhớ nữa thì gán vào DataTable như sau:
    Visual C# Code:
    1. DataTable table = ds.Tables[0];

    5.Khi bạn tương tác với Registry.
    Và các bạn muốn lấy (Get) hoặc gán (Set) giá trị nào đó cho 1 key trong Registry:
    Nếu gặp lỗi như trên thì bạn hãy kiểm tra lại đường dẫn đến khóa đó xem có đúng không.Hoặc xem lại cái key của bạn muốn lấy giá trị xem có tồn tại không.

    6.Nếu 1 đối tượng đang là NULL mà dùng phương thức ToString() để lấy giá trị của nó thì sẽ gặp lỗi như trên.

    P/s:Trên là những trường hợp theo quản điểm chủ quan của mình có sai sót chỗ nào mong các bạn thông cảm .Có thể còn nhiều trường hợp khác nữa mong các bạn góp ý thêm

    Lý do mình lập Topic này ở đây là vì đây là box thắc mắc các vấn đề các bạn gặp phải khi lập trình nên các bạn thường xuyên vào đây. Do đó khi có bạn nào gặp phải vấn đề như trên thì khỏi phải lập đề tài mới
    Đã được chỉnh sửa lần cuối bởi huuhung : 03-10-2011 lúc 10:08 PM. Lý do: Bổ sung lý do lập topic

  2. #2
    Ngày gia nhập
    04 2009
    Nơi ở
    Gầm cầu
    Bài viết
    2,230

    Object reference not set to an instance of an object
    mình thì thường thì trước khi dùng object thì check null object
    if(obj==null)obj=new obj(params[]);
    sẽ tránh được lỗi trên

  3. #3
    Ngày gia nhập
    05 2010
    Bài viết
    347

    cứ theo hướng dẫn lỗi mà khắc phục thoai. Nó báo không có đối tượng thì mình tạo đối tượng cho nó là oke.

  4. #4
    Ngày gia nhập
    08 2011
    Nơi ở
    Yên Bái- Hà Nội
    Bài viết
    961

    Trích dẫn Nguyên bản được gửi bởi tuandoi1 Xem bài viết
    cứ theo hướng dẫn lỗi mà khắc phục thoai. Nó báo không có đối tượng thì mình tạo đối tượng cho nó là oke.
    đúng roài. Lỗi "null reference algorithm" mới khó.hix
    Skype: mrfour.it - Yahoo:mrfour_it
    Gmail: mrfour.it@gmail.com
    Bạn muốn học lập trình? Bạn chưa có kiến thức cơ bản? Bạn muốn học từ cơ bản tới nâng cao?... Bạn muốn có source code để tham khảo? Muốn có người hỗ trợ khi học?....http://www.laptrinh123.com sẽ giúp bạn những điều đó!

  5. #5
    Ngày gia nhập
    08 2011
    Bài viết
    27

    6.Nếu 1 đối tượng đang là NULL mà dùng phương thức ToString() để lấy giá trị của nó thì sẽ gặp lỗi như trên.
    ==> không thấy đưa ra giải pháp khắc phục

    Làm như vậy tốt nhất chưa?

    string x= (str==null?"":str.ToString());
    Đã được chỉnh sửa lần cuối bởi HuyenTran2011 : 27-10-2011 lúc 10:17 AM.

  6. #6
    Ngày gia nhập
    10 2011
    Nơi ở
    Gò Vấp - HCM
    Bài viết
    9

    Mặc định Lỗi: Object reference not set to an instance of an object trong lập trình C# - Nguyên nhân và cách khắc phục

    Do bạn declare(variable) ra 1 biến có thể là array, int, string, datable, hashtable in c#
    mà những biến này mình chưa new nó thì default sẽ là null
    nên cách tốt nhất là khi mình khai báo một kiểu dữ liệu nào đó thì bạn nên
    1. gán default cho biến đó
    ex: string strPass = String.Empty() or string strPass = ""
    int intNo = 0
    Datatable dtTemp = null nếu là datatable thì nên gán bằng null lý dó là nếu bạn chưa sử dụng thì đừng bao gời new Datatable() nhé tốn bộ nhớ

    2. nếu bạn muốn gán dữ liệu cho nó thì kiểm tra trước khi gắn thì ko bao gời bị lỗi
    3. để tránh những lỗi như thế này thì cũng ko khó và ko dễ chủ yếu là do mình viết từng đoạn code mà thôi, cái này phụ thuộc vào kinh nghiệm của mỗi người.

    Một vài ý, hy vọng giúp dc.
    Yahu': newmoon_04h

  7. #7
    Ngày gia nhập
    06 2011
    Bài viết
    6

    Mình cũng đang bị cái lỗi thứ 6.
    Chẳng là cái Combombox của mình chưa được Selected Index mà mình đã gọi hàm
    Combobox.SelectedItem.ToString();
    ( Vấn đề ở đây là mình không muốn Selected Index trước cái combobox của mình, vì khi mình Selected Index thì nó lại gọi sự kiện click của Combobox)
    Bạn nào giúp mình vấn đề này với!

  8. #8
    Ngày gia nhập
    11 2008
    Nơi ở
    An Giang
    Bài viết
    502

    Bạn có thể gán thuộc tính SelectIndex = 0 của Combobox.

  9. #9
    Ngày gia nhập
    06 2011
    Bài viết
    6

    Uhm,
    Bạn có thể giúp mình xem câu lệnh này của mình sai ở chỗ nào nhé:
    objCommand.CommandText = "Select * From [" + Nb_TenBang + "] Where [Story=? and Column=? and Loc=?]";

    Trích dẫn Nguyên bản được gửi bởi kiendhxd Xem bài viết
    Uhm,
    Bạn có thể giúp mình xem câu lệnh này của mình sai ở chỗ nào nhé:
    objCommand.CommandText = "Select * From [" + Nb_TenBang + "] Where [Story=? and Column=? and Loc=?]";
    vừa mày mò sửa được luôn rồi :
    objCommand.CommandText = "Select * From [" + Nb_TenBang + "] Where (Story=? and Column=? and Loc=?)";

  10. #10
    Ngày gia nhập
    04 2009
    Nơi ở
    Hà Nội
    Bài viết
    733

    Mình tưởng cái này visual sẽ đưa ra cảnh báo là sử dụng 1 đối tượng chưa được tạo thể hiện nhỉ? Lúc F5 ý! Sau đó thì mình sẽ edit nó rồi run success. Thực ra nếu nắm bắt kỹ thì biết được cái mình khai báo là Data Type hay Ref Tye sẽ tránh được lỗi này, đặc biệt khi sử dụng nó thì cần phải kiểm tra nó có null hay không là ổn.
    Hỏi một câu thì chỉ dốt trong chốc lát.Nhưng nếu không hỏi thì bạn sẽ dốt suốt đời.

Các đề tài tương tự

  1. Trả lời: 9
    Bài viết cuối: 26-10-2013, 10:27 PM
  2. Error:Object reference not set to an instance of an object.Không khởi chạy được file Global.asax
    Gửi bởi nightelf trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 16-04-2013, 12:10 PM
  3. Cách sửa lỗi Object reference not set to an instance of an object trong Xml
    Gửi bởi thangemhamhochoi trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 27-11-2012, 09:58 AM
  4. lỗi Object reference not set to an instance of an object. khi submit form dùng Html.DropDownList
    Gửi bởi tuanngocpt trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 0
    Bài viết cuối: 03-05-2012, 04:02 AM
  5. Socket Lỗi Object reference not set to an instance of an object. Lấy email sử dụng POP3 trong C#
    Gửi bởi kamikaze129 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 26-04-2011, 10:56 AM

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn