检查DataTable仍然= null,即使它在数据库中有记录

时间:2013-11-15 09:25:02

标签: c# asp.net sql-server

SQL Server 2008数据库中的表CLASS(id,name)

我的aspx页面中有一个CreateClass函数:

 public void CreateClass(object sender, EventArgs e)
{
    string idclass= txtID.Text;
    string name= txtName.Text;

    string sql="select * From CLASS where id="+idclass;
    Datatable class= excute...;
    if(class!=null)
    {
        LabelError.Text="ID class is existed already!";
        return;
    }
    else

    {
        ... write into database...
    }
}

构建程序,首先我输入:txtID.Text= "DDD121"txtName.Text="Class 2"

它仍有1条记录,在数据库中有id= DDD121但程序传递if语句并跳转到else语句内。为什么?当然,在else语句中,id = DDD121的新类无法插入到数据库中,但我需要显示错误消息。

我在SQL服务器查询窗口中检查sql查询:select * from CLASS where id='DDD121'它工作正常,1条记录显示id = DDD121。

尝试调试:

sql= "select * FROM CLASS WHERE ID=DDD121";
class=null;

帮助!!!!是if(class!=null)检查Datatable是否没有行的正确方法???

2 个答案:

答案 0 :(得分:1)

当您尝试调试时,我怀疑您会看到class不为空,但它是一个空的DataTable。

这应该给你一个关于测试什么而不是class != null的提示。

是的,SQL注入。但这超出了这一范围。我建议不要忽视它。

如果调试中class为空,但您确定记录应该存在,我建议您检查一下您是否确实正确连接到数据库,以及是否正确执行了查询。

execute...肯定不起作用,所以也许在实际代码中出现问题。

啊,确保你把你想要的值放在''之间。否则它赢了;确实工作。 顺便说一下,不这样做与SQL-Injection几乎没有关系。

只需一个提示,一旦你开始工作,而不是在你的文本框中填写DDD121,填写ABC'; DROP TABLE CLASS;并看看会发生什么;)是SQLinjection。

答案 1 :(得分:0)

 if(class!=null && class.Rows.Count>0)
    {
        LabelError.Text="ID class is existed already!";
        return;
    }
    else

    {
        ... write into database...
    }

此代码检查null和空数据表