我创建了一个执行查询的方法,我只需要知道它是返回true还是false
public bool CheckData(string sql)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["FabFlabs"].ToString());
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
con.Close();
bool setYN =?
return setYN ;
}
查询类似select email from Admin where email = ''
有没有更好的方法来构建查询?
答案 0 :(得分:5)
我目前注意到的事情是sql显然没有参数化。那对我来说是一个巨大的警钟,应立即修复。作为次要问题,您并非using
正确,并且当您的查询显然是...查询时,您正在使用ExecuteNonQuery
。
然后,更好的检查是:
public bool CheckData(string sql)
{
using(var con = CreateConnection())
using(var cmd = new SqlCommand(sql, con))
{
// ADD PARAMETERS
con.Open();
return cmd.ExecuteScalar() != null; // checks for a row
}
}
然而;传递参数并不容易。我强烈建议像" dapper"适当的(即完全删除)您的CheckData
方法。考虑:
bool haveEmail;
string email = /* TODO; for example, "admin@example.com" */
using(var conn = CreateConnection())
{
haveEmail = conn.Query<int>(
"select top 1 1 from Admin where email=@email",
new { email }).Any(); // regular LINQ over IEnumerable<T>
}
简单,干净,完全参数化,高效。
答案 1 :(得分:2)
对于SELECT
语句,ExecuteNonQuery
只执行您的命令。它没有做更多的事情。
对于UPDATE,INSERT和DELETE语句,返回值为 受命令影响的行数。当a上存在触发器时 正在插入或更新的表,返回值包括数字 受插入或更新操作影响的行数和数字 受触发器或触发器影响的行数。 适用于所有其他类型的 语句,返回值为-1 。
您可以使用COUNT()
稍微更改一下您的查询,并使用ExecuteScalar
方法。
using(SqlConnection con = new SqlConnection(ConString))
using(SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "select COUNT(email) from Admin where email = @email";
cmd.Parameters.AddWithValue("@email", string.Empty);
con.Open();
int count = (int)cmd.ExecuteScalar();
bool b;
if(count > 0)
b = true;
else
b = false;
}
我也喜欢Marc's solution。由于ExecuteScalar
会返回object
,因此您可以轻松地检查它是否为null;
cmd.ExecuteScalar() != null
答案 2 :(得分:1)
答案 3 :(得分:1)
以下是检查数据是否存在的方法
int q = 0;
bool NewCity = true;
MainWindow.cmdSel = new SqlCommand("SELECT COUNT(*) FROM DBO.Cities t WHERE t.Name=@Name", MainWindow.conn);
MainWindow.cmdSel.Parameters.Add("@Name", SqlDbType.NVarChar);
MainWindow.cmdSel.Parameters["@Name"].Value = Name;
try
{
q = (int)MainWindow.cmdSel.ExecuteScalar();
if (q > 0)
{
NewCity = false;
MessageBox.Show("City exists", "Warning");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}