我正在尝试检查我的查询是否返回值,但我无法理解它,因为if-statement
有效但else if-statement
无效。
基本上我想在查询返回空时将Label设置为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();
如果查询返回某些内容,则数据绑定工作正常。
编辑:我知道我多次运行查询,这段代码只是测试一堆不同的东西的结果。刚发布,以便更好地了解我想要实现的目标答案 0 :(得分:2)
由于您填写DataTable
,您只需要检查它是否包含行:
LabelWebsite.Visible = dt.Rows.Count > 0;
如果您使用DataReader
,则可以使用HasRows
property。
答案 1 :(得分:0)
ExecuteNonQuery
执行您的查询,并返回-1
,因为您的语句是SELECT
语句。
对于UPDATE,INSERT和DELETE语句,返回值为 受命令影响的行数。当a上存在触发器时 正在插入或更新的表,返回值包括数字 受插入或更新操作影响的行数和数字 受触发器或触发器影响的行数。 适用于所有其他类型的 语句,返回值为-1
您可以使用DataRowCollection.Count
property之类检查数据表行数
if(dt.Rows.Count > 0)
{
ListViewWebsite.DataSource = dt;
ListViewWebsite.DataBind();
}
else
{
LabelWebsite.Visible = false;
}
除此之外,请使用using
statement来处置您的SqlConnection
和SqlCommand
,而不是手动调用.Close()
方法。
using(SqlConnection conn = new SqlConnection(strCon))
using(SqlCommand cmd = conn.CreateCommand())
{
//
}
不要使用AddWithValue
方法。 可能有时会产生意外结果。使用.Add()
方法或它的重载。
答案 2 :(得分:0)
试试这个
da.Fill(dt);
if(dt.Rows.Count>0)
{
LabelWebsite.Visible = false;
}
答案 3 :(得分:0)
如果您使用的是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变量。
答案 4 :(得分:0)
如果您真的有兴趣只知道是否有行,还有另一种选择。
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,