C# 检查SQL语句在C中是否返回空#

C# 检查SQL语句在C中是否返回空#,c#,sql,C#,Sql,我试图检查我的查询是否返回值,但我无法理解它,因为if语句有效,而else if语句无效 基本上,如果查询返回空,我想将标签设置为Visible=False 我的代码: SqlConnection conn = new SqlConnection(strCon); SqlCommand cmd = new SqlCommand("SELECT url, websiteId FROM Website WHERE name LIKE @search + '%' OR url LIKE @se

我试图检查我的查询是否返回值,但我无法理解它,因为
if语句
有效,而
else if语句
无效

基本上,如果查询返回空,我想将标签设置为
Visible=False

我的代码:

SqlConnection conn = new SqlConnection(strCon);
    SqlCommand cmd = new SqlCommand("SELECT url, websiteId FROM Website WHERE name LIKE @search + '%' OR url LIKE @search + '%'", conn);
    conn.Open();
    cmd.Parameters.AddWithValue("@search", search);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    da.Fill(dt);


    if (cmd.ExecuteNonQuery() != 0)
       {
          ListViewWebsite.DataSource = dt;
          ListViewWebsite.DataBind();
       }
    else if(cmd.ExecuteNonQuery() == 0)
       {
          LabelWebsite.Visible = false;
       }
  conn.Close();
如果查询返回某些内容,则数据绑定工作正常


编辑:我知道我多次运行这个查询,这段代码只是测试了一系列不同东西的结果。只是为了更好地了解我想要实现的目标而发布的

,因为您正在填充一个
数据表
,您只需要检查它是否包含行:

LabelWebsite.Visible = dt.Rows.Count > 0;
如果您使用的是
DataReader
,您可以使用。

执行您的查询并返回
-1
,因为您的语句是
SELECT
语句

对于UPDATE、INSERT和DELETE语句,返回值为 受命令影响的行数。当触发器存在于 在插入或更新表时,返回值包括数字 受插入或更新操作和编号影响的行数 受一个或多个触发器影响的行数适用于所有其他类型的 语句,返回值为-1

您可以使用like检查数据表行数

除此之外,使用来处理
SqlConnection
SqlCommand
而不是手动调用
.Close()
方法

using(SqlConnection conn = new SqlConnection(strCon))
using(SqlCommand cmd = conn.CreateCommand())
{
   //
}
不要使用
AddWithValue
方法。有时可能会产生意想不到的结果。使用
.Add()
方法或其重载

试试这个

da.Fill(dt);
if(dt.Rows.Count>0)
{

LabelWebsite.Visible = false;
}

只有在使用dataadapter时才需要此选项:

SqlConnection conn = new SqlConnection(strCon);
SqlCommand cmd = new SqlCommand("SELECT url, websiteId FROM Website WHERE name LIKE @search + '%' OR url LIKE @search + '%'", conn);
conn.Open();
cmd.Parameters.AddWithValue("@search", search);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);

在da.Fill后面放一个断点,并使用调试器查看dt变量。

如果您真的只想知道是否有行,还有另一个选项

string cmdText = @"IF EXISTS(SELECT 1 FROM Website 
                    WHERE name LIKE @search 
                    OR url LIKE @search) 
                    SELECT 1 ELSE SELECT 0";
using(SqlConnection conn = new SqlConnection(strCon))
using(SqlCommand cmd = new SqlCommand(cmdText, conn)
{
    conn.Open();
    cmd.Parameters.AddWithValue("@search", search + "%");
    int exists = Convert.ToInt32(cmd.ExecuteScalar());
    LabelWebsite.Visible = (exists == 1);
}

这种方法不尝试返回行及其值。如果与WHERE子句匹配的行存在或不存在,它只返回1,

您知道您正在执行查询2次吗?是的,我只是在测试atm。如果
,为什么需要
?为什么不干脆
else
?@CoderofCode三次。@Steve yep错过了那一次。谢谢:)效果很好
string cmdText = @"IF EXISTS(SELECT 1 FROM Website 
                    WHERE name LIKE @search 
                    OR url LIKE @search) 
                    SELECT 1 ELSE SELECT 0";
using(SqlConnection conn = new SqlConnection(strCon))
using(SqlCommand cmd = new SqlCommand(cmdText, conn)
{
    conn.Open();
    cmd.Parameters.AddWithValue("@search", search + "%");
    int exists = Convert.ToInt32(cmd.ExecuteScalar());
    LabelWebsite.Visible = (exists == 1);
}