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);
}