检查数据表是否为空

Ton*_*ony 11 c# sql

以下代码是我用来从sql数据库中检索用户信息的代码.

            string userName = LoginUser.UserName;
            string password = LoginUser.Password;
            string comm = "SELECT Username,Password,Clientname,Role FROM Users WHERE Username = '" + userName + "';";
            bool rememberUserName = LoginUser.RememberMeSet;

            SqlConnection conn = new SqlConnection(connstring);
            conn.Open();

            SqlCommand command = new SqlCommand(comm, conn);
            SqlDataAdapter da = new SqlDataAdapter(command);
            DataTable dt = new DataTable();
            da.Fill(dt);
            DataRow dr = dt.NewRow();
            if (dt != null)
            {
                //logic
            }
Run Code Online (Sandbox Code Playgroud)

但是,如果数据库中没有用户名等于LoginUser.Username的条目,则(dt!= null)不返回false.是否有不同的方法来检查sqlcommand是否成功?

dri*_*iis 33

DataTable如果没有记录匹配,您将获得一个空,因此您可以检查返回的记录数:

if (dt.Rows.Count > 0)
Run Code Online (Sandbox Code Playgroud)

而且,略微偏离主题,请阅读您的问题下面的评论,然后谷歌术语SQL注入和参数化SQL语句.尝试从这开始.

  • 不要使用rows.Count.那就是要求存在多少行.如果有很多,计算它们需要一些时间.你真正想知道的是"至少有一个吗?" 你不在乎是否有10或1000或10亿.你只想知道是否至少有一个.如果我给你一个盒子并问你是否有任何大理石,你会把盒子丢弃在桌子上并开始计数吗?当然不是.来自/sf/ask/438518811/ bool hasRows = dataTable1.Rows.Any() (3认同)

Jus*_*ner 10

为什么不稍微更改语句以查看DataTable是null还是没有行:

if(dt != null && dt.Rows.Count > 0)
Run Code Online (Sandbox Code Playgroud)

另外,在旁注中,您还应该查看参数化查询,而不是动态构建SQL.它将减少试图破坏您的应用程序的攻击者的攻击媒介数量.

  • dt被明确设置为一个新的DataTable();*曾经*为空吗? (2认同)