C#:错误:对象引用设置为对象的实例

时间:2015-05-15 10:11:12

标签: c# object reference

我正在开发一个会计桌面应用程序,它提供了许多有关用户的具体信息。

我遇到麻烦的部分就在这里 不应像我一样将date = comboBoxEdit2.EditValue.ToString();行指定为null。但我找不到更好的选择,很明显,编译器给我Object reference not set to an instance of an object.错误。我使用devexpress并且只找到 .EditValue 控件来检查我的数据库中的信息。

谢谢。

这是我的完整方法,

public void fillCombo2()
        {
            using (SqlConnection con = new SqlConnection("Server=DLL;Database=BSSERVIS;User Id=sa;Password=1;"))
            {
                con.Open();
                string date = ("select DATE from BSSERVIS.dbo.ENUMERATION");
                date = comboBoxEdit2.EditValue.ToString();
                System.Data.SqlClient.SqlDataReader dr = null;               
                SqlCommand cmd = new SqlCommand("select distinct(DATE) from BSSERVIS.dbo.ENUMERATION where WAREHOUSE_NR='" + date + "'");
                dr = cmd.ExecuteReader();
                dr.Read();
                while (dr.Read())
                {
                    string date = dr.GetString(0);
                    comboBoxEdit2.Properties.Items.Add(date);
                }

            } 
        }

1 个答案:

答案 0 :(得分:0)

你应该检查以确保comboBoxEdit2.EditValue首先包含一个有效的日期值(假设这是C#;它不是从您应用的标签中清除),使用:

if (DateTime.TryParse(comboBoxEdit2.EditValue, out date))
{
    // Your query execution code
}

如果不是日期,请执行查询,或者在没有参数的情况下进行设置。

另请注意,如果用户在您的文本框中输入恶意数据,您的代码很容易受到SQL注入攻击。以上情况更好,但您还应该考虑使用SQL参数来使其更安全。

DateTime.TryParse将尝试将表达式解析为DateTime对象,如果成功则返回true,否则返回false。如果成功,将使用DateTime对象填充out参数日期。