检查DataReader是否为空

时间:2012-10-22 03:13:01

标签: c# visual-studio-2010 datareader

DataReader为空时,我的代码无法运行。以下是我的代码。

我的工作是关于日程安排。而我的问题是节假日限制。当用户输入日期(开始日期和结束日期)时,程序将检查输入的日期之间是否有任何假期。如果DataReader没有任何数据,则应保存输入的日期,或者如果DataReader有数据,则不保存输入的日期,程序会显示错误消息。

try
{
    econ = new SqlConnection();
    econ.ConnectionString = emp_con;
    econ.Open();
    ecmd = new SqlCommand("SELECT CD_Date FROM CONS_DATES where CD_Date between '" + Convert.ToDateTime(dtpStart.Text) + "' and '" + Convert.ToDateTime(dtpEnd.Text) + "'", econ);
    ecmd.CommandType = CommandType.Text;
    ecmd.Connection = econ;
    dr = ecmd.ExecuteReader();
    while (dr.Read())
    {
        DateTime cdname = (DateTime)dr["CD_Date"];

        //This code is working
        if (Convert.ToDateTime(cdname) >= Convert.ToDateTime(dtpStart.Text) || Convert.ToDateTime(cdname) <= Convert.ToDateTime(dtpEnd.Text))
        {
            MessageBox.Show("Holiday Constraint. Creating Record Denied.");
        } //if

        //This code is not working. When the program fetch with no record, it should be continue to add the record but it's not working
        else
        if (dr == null || !dr.HasRows)
        {
            //In this area is my code for inserting the entered data.
            MessageBox.Show("Add na|!!!. Creating Record Denied.");
        }//if else
    }//while
}//try
catch (Exception x)
{
    MessageBox.Show(x.GetBaseException().ToString(), "Connection Status", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

5 个答案:

答案 0 :(得分:7)

问题是,while循环仅在dr有一条或多条记录时才会运行。但是,如果drnull,则while循环将永远不会运行。

更好的解决方案是拥有System.Data.SqlClient.SqlDataReader

并检查,

if (!dr.HasRows)
{
    // Your code to save the records, if no holidays found
}
else
{
    // Your code to show the error message, if there is one or more holidays
}

答案 1 :(得分:0)

while(dr.Read())表示博士至少有一行。

所以其他人永远不会执行

你可以在之前做其他事情吗?

答案 2 :(得分:0)

我尝试了我的想法并回答了我的问题。我做的是在datagridview中显示获取的数据然后我创建了一个条件,如果datagridview有一个记录,那么我的记录将不会被保存,如果datagridview没有任何记录,那么记录将被保存。

谢谢大家!

答案 3 :(得分:0)

试试这个:

while (sqlreader.Read())
{
    tbSubscriptionInfo.Text = sqlreader["nr_ore"].ToString();
}

if (!sqlreader.HasRows)
{
    tbSubscriptionInfo.Text = "";
}

答案 4 :(得分:0)

if (dr == null || !dr.HasRows)
{
    // Your code to show the error message, if there is one or more holidays       
}
else
{
    // Your code to save the records, if no holidays found
}