There is this string in the original code that looks for this error:
(It was done in VB)
'Open connection
connection.Open()
'Execute reader
Dim reader As OdbcDataReader = command.ExecuteReader
'Check if reader has any rows
If reader.HasRows Then
'Check that first column is not Null
If reader.IsDBNull(0) = False Then
Dim dt As New DataTable("CSQ")
dt.Load(reader)
'Set data values
contactsWaiting = dt.Rows(0).Item("scallswaiting")
totalContacts = dt.Rows(0).Item("stotalcalls")
oldestContact = dt.Rows(0).Item("soldestcontact")
contactsHandled = dt.Rows(0).Item("scallshandled")
contactsAbandoned = dt.Rows(0).Item("scallsabandoned")
If queue = 1 Then
lblCGStatus.Text = ""
ElseIf queue = 2 Then
lblCEStatus.Text = ""
End If
Else
If queue = 1 Then
lblCGStatus.Text = "Restart - NULL"
ElseIf queue = 2 Then
lblCEStatus.Text = "Restart - NULL"
End If
End If
Else
If queue = 1 Then
lblCGStatus.Text = "Restart - NO ROWS"
ElseIf queue = 2 Then
lblCEStatus.Text = "Restart - NO ROWS"
End If
End If
reader.Close()
connection.Close()
This is what my code looks like:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Odbc;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace RSQ_App_V1
{
public partial class RSQ : Form
{
public RSQ()
{
InitializeComponent();
timer();
}
private void GetUCCXData(int queue)
{
try
{
//Initialize variables
int contactsWaiting = 0;
//rtcsqssummary = callswaiting
int oldestContact = 0;
//rtcsqssummary = oldestcontact
int totalContacts = 0;
//rtcsqssummary = totalcalls
int contactsHandled = 0;
//rtcsqssummary = callshandled
int contactsAbandoned = 0;
//rtcsqssummary = callsabandoned
// Establishes Connection to UCCX
OdbcConnection connection = new OdbcConnection();
connection.ConnectionString = "DSN=UCCX";
//Selects Data 3
string queryString = "";
if (queue == 1)
{
queryString = "SELECT SUM(totalcalls) AS stotalcalls, SUM(callswaiting) AS scallswaiting, SUM(oldestcontact) AS soldestcontact, SUM(callshandled) AS scallshandled, SUM(callsabandoned) AS scallsabandoned, SUM(longesttalkduration) AS slongesttalkduration FROM rtcsqssummary WHERE csqname='RSQ-Spanish' OR csqname='RSQ-English'";
}
else if (queue == 2)
{
queryString = "SELECT SUM(totalcalls) AS stotalcalls, SUM(callswaiting) AS scallswaiting, SUM(oldestcontact) AS soldestcontact, SUM(callshandled) AS scallshandled, SUM(callsabandoned) AS scallsabandoned, SUM(longesttalkduration) AS slongesttalkduration FROM rtcsqssummary WHERE csqname= 'RSQ-Elevator'";
}
// Query Command
OdbcCommand command = new OdbcCommand(queryString, connection);
//Open Connection
connection.Open();
//Executes Data Reader
OdbcDataReader reader = command.ExecuteReader();
DataTable dt = new DataTable("UCCXData");
dt.Load(reader);
reader.Close();
connection.Close();
//Fills the dataview
dvData.DataSource = dt;
if (queue == 1)
{
//Resident Services
totalContacts = Convert.ToInt32(dvData.Rows[0].Cells["stotalcalls"].Value);
valCGTotal.Text = totalContacts.ToString();
contactsWaiting = Convert.ToInt32(dvData.Rows[0].Cells["scallswaiting"].Value);
valCGWaiting.Text = contactsWaiting.ToString();
oldestContact = Convert.ToInt32(dvData.Rows[0].Cells["soldestcontact"].Value);
valCGOldest.Text = CalculateTime(oldestContact).ToString();
contactsHandled = Convert.ToInt32(dvData.Rows[0].Cells["scallshandled"].Value);
valCGHandled.Text = contactsHandled.ToString();
contactsAbandoned = Convert.ToInt32(dvData.Rows[0].Cells["scallsabandoned"].Value);
valCGAbandoned.Text = contactsAbandoned.ToString();
contactsHandled = Convert.ToInt32(dvData.Rows[0].Cells["scallshandled"].Value);
totalContacts = Convert.ToInt32(dvData.Rows[0].Cells["stotalcalls"].Value);
valCGPercentHandled.Text = CalculatePercentHandled(contactsHandled, totalContacts) + "%";
}
else if (queue == 2)
{
//Elevator
totalContacts = Convert.ToInt32(dvData.Rows[0].Cells["stotalcalls"].Value);
valCETotal.Text = totalContacts.ToString();
contactsWaiting = Convert.ToInt32(dvData.Rows[0].Cells["scallswaiting"].Value);
valCEWaiting.Text = contactsWaiting.ToString();
oldestContact = Convert.ToInt32(dvData.Rows[0].Cells["soldestcontact"].Value);
valCEOldest.Text = CalculateTime(oldestContact).ToString();
contactsHandled = Convert.ToInt32(dvData.Rows[0].Cells["scallshandled"].Value);
valCEHandled.Text = contactsHandled.ToString();
contactsAbandoned = Convert.ToInt32(dvData.Rows[0].Cells["scallsabandoned"].Value);
valCEAbandoned.Text = contactsAbandoned.ToString();
contactsHandled = Convert.ToInt32(dvData.Rows[0].Cells["scallshandled"].Value);
totalContacts = Convert.ToInt32(dvData.Rows[0].Cells["stotalcalls"].Value);
valCEPercentHandled.Text = CalculatePercentHandled(contactsHandled, totalContacts) + "%";
}
}
catch (Exception ex)
{
//Error Textbox
MessageBox.Show("there was an error - " + ex);
errorBox1.Text = " " + ex;
}
}
//Calculate Time
private string CalculateTime(int millis)
{
int Hours = TimeSpan.FromMilliseconds(millis).Hours;
int Minutes = TimeSpan.FromMilliseconds(millis).Minutes;
int Seconds = TimeSpan.FromMilliseconds(millis).Seconds;
return Hours.ToString("D2") + ":" + Minutes.ToString("D2") + ":" + Seconds.ToString("D2");
}
//Calculate Percent
private string CalculatePercentHandled(double handled, int total)
{
if (total > 0)
{
return Math.Round(((handled / total) * 100)).ToString();
}
else
{
return "0";
}
}
private void timer()
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Tick += new EventHandler(RSQ1_Load);
timer.Interval = 3000;
timer.Enabled = true;
timer.Start();
}
private void RSQ1_Load(object sender, EventArgs e)
{
//Get Castle Group data - queue =1
GetUCCXData(1);
//Get Connection data - quueue =2
GetUCCXData(2);
}
}
}
I tried putting in the same concept that was used like this:
//Check if reader has any rows
if (reader.HasRows) {
//Check that first column is not Null
if (reader.IsDBNull(0) == false)
But run into a variety of errors. Is there another way to check for DBNull and not run the code if it runs into it?
Thank you.

New Topic/Question
Reply



MultiQuote





|