PDA

View Full Version : پیغام خطای null refrence



momimomi
یک شنبه 17 آبان 1394, 19:14 عصر
سلام
این متد را در نظر بگیرید:

#region SearchPersonel
void SearchPersonel()
{
string query = null;
try
{
switch (cmbSearch.Text)
{
case "نام":
{
query = "SELECT personel2.folder,personel.*" +
"FROM personel left outer JOIN personel2 ON personel2.code=personel.code where personel.fname like '" + txtSearch.Text + "%'"; break;
}


case "نام خانوادگی":
{
query = "SELECT personel2.folder,personel.*" +
"FROM personel left outer JOIN personel2 ON personel2.code=personel.code where personel.lname like '" + txtSearch.Text + "%'"; break;
}


case "کد پرسنلی":
{
query = "SELECT personel2.folder,personel.*" +
"FROM personel left outer JOIN personel2 ON personel2.code=personel.code where personel.code like '" + txtSearch.Text + "%'"; break;
}
case "شماره پرونده":
{
query = "SELECT personel2.folder,personel.*" +
"FROM personel left outer JOIN personel2 ON personel2.code=personel.code where personel2.folder like '" + txtSearch.Text + "%'"; break;
}
default: { break; }


}


DAL dalobj = new DAL();
OleDbConnection con = dalobj.SetConnection();
con.Open();
OleDbCommand command = new OleDbCommand();
command.CommandText = query;
command.Connection = con;
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = command;
DataTable objDataTable = new DataTable();
adapter.Fill(objDataTable);
con.Close();

dgPersonel1.DataSource = objDataTable;
}
catch { }
}
#endregion




متد بالا را در رویداد text change یک تکس باکس و یک کمبوباکس فراخوانی می کنم
تا اینجا مشکلی وجود ندارد و اطلاعات خوانده شده از بانک اطلاعاتی در dg1 که همان دیتا گریدم هست نمایش داده می شود.
متد زیر را هم در نظر بگیرید:


#region PhotoFinder
private void PhotoFinder(string code)
{

pictureBox1.Image = null;
OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"provider = microsoft.jet.oledb.4.0;" + @"data source =a.mdb";
OleDbCommand com = new OleDbCommand();
com.Connection = con;
com.CommandText = "SELECT photo FROM personel2 WHERE code='" + code + "'";
con.Open();
OleDbDataAdapter da = new OleDbDataAdapter(com);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
if (dt.Rows[0]["photo"] != DBNull.Value)
{
if(code!=(object)null)
{
pictureBox1.Image = ByteArrayToImage((Byte[])dt.Rows[0]["photo"]);
}
}



con.Close();
}

}
#endregion


با فراخوانی این متد در رویداد text change همان تکس باکس و کمبو باکس بالایی برنامه در اجرا مشکلی ندارد و تا وقتی در دیتا گرید اطلاعاتی نمایش داده شود کار می کند، اما زمانی که اطلاعات سرچ شده در تکست باکس، در بانک اطلاعاتی موجود نباشد و ردیفی از دیتاگرید را پر نکند، متد photo finder پیغام خطای null refrence می دهد.
لطفا مرا راهنمایی کنید.

MortezaZandi
دوشنبه 18 آبان 1394, 02:06 صبح
سلام
شرطی که خالی بودن کد را بررسی میکند حتی اگر Code هم خالی باشد، درست است. if(code!=(object)null)


برای یررسی خالی بودن یک متغییر رشته ای از روش زیر استفاده کنید:



if (string.IsNullOrEmpty(s) == true)
}
...
{