当我在localhost下运行代码或调试它时。它不会给我任何错误但是当我发布它并在我的服务器中运行它时,有时它会给出以下错误。
********** 22-07-2015 17:35:20 ********** 异常类型:System.NullReferenceException 例外:对象引用未设置为对象的实例。 资料来源:LiveRecordInGrid 堆栈跟踪: at GPCBDataMonitoring.GPCBConMethod.Select_Data(String query) 在LiveRecord.LiveRecordInGrid()
********** 22-07-2015 17:51:28 ********** 异常类型:System.NullReferenceException 例外:对象引用未设置为对象的实例。 资料来源:LiveRecordInGrid 堆栈跟踪: 在LiveRecord.LiveRecordInGrid()
********** 22-07-2015 17:51:28 ********** 异常类型:System.NullReferenceException 例外:对象引用未设置为对象的实例。 来源:FillListView 堆栈跟踪: at GPCBDataMonitoring.GPCBConMethod.Select_Data(String query) 在SiteSettings.FillListView()
我的方法如下..
#region Fill LiveRecord
public void LiveRecordInGrid()
{
try
{
gvLiveRecord.DataSource = null;
#region Store All Parameter of Site In Array "ParaArray"
DataTable dt1 = new DataTable();
string getSiteParameter = "Select \"Parameter\" from \"SiteList\" where \"SiteId\" = " + Convert.ToInt64(Session["SiteId"].ToString()) + "";
try
{
dt1 = GPCBConMethod.Select_Data(getSiteParameter);
}
catch (Exception ex)
{
ExceptionUtility.LogException(ex, System.Reflection.MethodBase.GetCurrentMethod().Name);
}
if (dt1.Rows.Count > 0)
{
string varSitePara = dt1.Rows[0]["Parameter"].ToString();
ParaArray = varSitePara.Split(new string[] { "," }, StringSplitOptions.None);
Array.Sort(ParaArray);
}
#endregion
#region Select Only All Latest Parameter Value Using DateTime
DataTable dt = new DataTable();
//dt = null;
foreach (string s in ParaArray)
{
string query = "Select * from \"SiteParaData\" where \"SitId\" = " + Convert.ToInt64(Session["SiteId"].ToString()) + " and \"ParaName\" = '" + s.ToString() + "' order by \"RecordDate\" Desc limit 1";
if (dt.Rows.Count > 0)
{
DataRow drMain = dt.NewRow();
DataTable dt2 = new DataTable();
//dt2 = null;
DataRow drTemp = dt2.NewRow();
try
{
dt2 = GPCBConMethod.Select_Data(query);
}
catch (Exception ex)
{
ExceptionUtility.LogException(ex, System.Reflection.MethodBase.GetCurrentMethod().Name);
}
if (dt2.Rows.Count > 0)
{
drTemp = dt2.Rows[0];
drMain.ItemArray = drTemp.ItemArray;
dt.Rows.Add(drMain);
}
}
else
{
try
{
dt = GPCBConMethod.Select_Data(query);
}
catch (Exception ex)
{
ExceptionUtility.LogException(ex, System.Reflection.MethodBase.GetCurrentMethod().Name);
}
}
}
#endregion
#region Fill GridView From DataTable
if (dt.Rows.Count > 0)
{
FillGridView(dt);
}
else
{
gvLiveRecord.DataSource = null;
gvLiveRecord.EmptyDataText = "No Live Record Found For Selected Site";
gvLiveRecord.DataBind();
lblNoRecord.Text = "";
}
#endregion
}
catch (Exception ex)
{
ExceptionUtility.LogException(ex, System.Reflection.MethodBase.GetCurrentMethod().Name);
}
}
#endregion
#region Bind GridView
public void FillGridView(DataTable dt)
{
try
{
lblUpdtTime.Text = "";
DataColumn newColumn1 = new DataColumn("Name", typeof(System.String));
newColumn1.DefaultValue = Session["SiteName"].ToString();
dt.Columns.Add(newColumn1);
DataColumn newColumn2 = new DataColumn("LastUpdatedDate", typeof(System.String));
newColumn2.DefaultValue = System.DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
dt.Columns.Add(newColumn2);
lblNoRecord.Text = "";
gvLiveRecord.DataSource = dt;
gvLiveRecord.DataBind();
lblUpdtTime.Text = "Last Data Update On: " + System.DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
}
catch (Exception ex)
{
ExceptionUtility.LogException(ex, System.Reflection.MethodBase.GetCurrentMethod().Name);
}
}
#endregion
public static DataTable Select_Data(string query)
{
try
{
using (con = new NpgsqlConnection(conStr))
{
con.Open();
cmd = new NpgsqlCommand(query, con);
dt = new DataTable();
da = new NpgsqlDataAdapter(cmd);
da.Fill(dt);
}
// Update_Operation();
return dt;
}
catch (Exception)
{
return null;
}
finally
{
//cmd.Connection.Close();
cmd = null;
con.Close();
con = null;
}
}
我只是没有得到我犯错误的地方。我认为错误仅来自Select_Data,但我无法追踪或解决它。
我每3秒在计时器的tick事件中调用此函数(LiveRecordInGrid)。
- >我通过逐步调试我的代码,多次检查数据表。我正在收集数据。
- >我正在使用PGAdmin-III(PostgreSQL)。
这个错误只出现在第一次或第二次,而我点击了菜单中的链接,下次没有几分钟就来了......
先谢谢。