【问题标题】:Check a field is in sql database using c#使用c#检查一个字段是否在sql数据库中
【发布时间】:2013-08-29 16:53:30
【问题描述】:
我想检查用户在我的数据库中的天气(检查 id)。我正在使用以下代码。这是工作。我只是想知道,这是正确的方法还是有其他方法可以做得更好(例如使用 COUNT(*) 或任何其他查询)。我正在 MVC4 中做我的项目
public bool CheckUser(int mem_id)
{
bool flag = false;
using (SqlConnection con = new SqlConnection(Config.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("SELECT Id FROM Mem_Basic WHERE Id="+ mem_id +"", con))
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
flag = true;
}
}
}
return flag;
}
【问题讨论】:
标签:
c#
sql
sql-server
asp.net-mvc-4
【解决方案1】:
您也可以执行与您类似的操作,但只需检查 null。
public bool CheckUser(int mem_id)
{
bool flag = false;
using (SqlConnection con = new SqlConnection(Config.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("SELECT Id FROM Mem_Basic WHERE Id="+ mem_id +"", con))
{
con.Open();
if (cmd.ExecuteScalar() != null)
{
flag = true;
}
}
}
}
【解决方案3】:
是的,如果您使用 SELECT COUNT(*) 查询并将返回的单个值分配给 int 而不是使用读取器语法,您的代码会更简单。
试试这个:
public bool CheckUser(int mem_id)
{
bool flag = false;
using (SqlConnection con = new SqlConnection(Config.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Mem_Basic WHERE Id="+ mem_id +""", con))
{
con.Open();
int count = (int) cmd.ExecuteScalar();
if(count > 0)
{
flag = true;
}
}
}
return flag;
}
【解决方案4】:
如果你想要一个单一的值,你可以使用 ExecuteSclar 函数。并使用参数化查询来避免 sql 注入。
using (SqlConnection con = new SqlConnection(Config.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("SELECT 1 FROM Mem_Basic WHERE Id=@id", con))
{
cmd.Parameters.AddWithValue("@ID", yourIDValue);
con.Open();
var found=(int)cmd.ExecuteScalar(); //1 means found
}
}