[英]ADO.NET: Check if a name already exists in database using id
我有一种方法可以检查数据库中是否已经存在名称。 我现在这样做的方式是首先通过公司 ID 获取公司名称,然后使用从UI
接收的名称作为参数检查名称。
现在当前的代码是巨大的,有没有最简单的方法可以做到这一点,或者我可以改进当前的代码。
public BaseResponse CheckDupliateCompany(string companyName, string companyId)
{
BaseResponse response = new BaseResponse();
string existingCompanyName = null;
using (SqlConnection con = new SqlConnection(connectionString))
{
if (companyId != null)
{
string sqlQuery = "SELECT * FROM CompanyInformation where CompanyID= " + companyId;
SqlCommand cmd = new SqlCommand(sqlQuery, con);
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
existingCompanyName = rdr["CompanyName"].ToString();
}
if (string.Equals(existingCompanyName, companyName))
{
response.Status = (int)Status.Failed;
} else
{
response.Status = (int)Status.Success;
}
con.Close();
}
else
{
string sqlQuery = "SELECT * FROM CompanyInformation where CompanyName= '" + companyName + "'";
SqlCommand cmd = new SqlCommand(sqlQuery, con);
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
response.Status = (int)Status.Failed;
}
con.Close();
}
}
return response;
}
我会用类似的东西 go 。 调试它,因为我还没有完全测试它
public BaseResponse CheckDupliateCompany(string companyName, string companyId)
{
BaseResponse response = new BaseResponse() { Status = (int)Status.Success};
string sqlQuery = "SELECT Count(*) FROM CompanyInformation where ";
SqlParameter param;
if (companyId != null)
{
param = new SqlParameter("@companyId", companyId);
sqlQuery += "CompanyId = @companyId";
}
else
{
param = new SqlParameter("@companyName", companyName);
sqlQuery += "CompanyName = @companyName";
}
using (SqlConnection con = new SqlConnection(_connectionString))
{
SqlCommand cmd = new SqlCommand(sqlQuery, con);
cmd.Parameters.Add(param);
con.Open();
int count = (int)cmd.ExecuteScalar();
if (count > 0)
{
response.Status = (int)Status.Failed;
}
con.Close();
}
return response;
}
我想至少有几种方法可以让它更容易或改进你的代码。 但让我提出几个我认为很重要的考虑因素:
¿ 您是否需要从CompanyInformation表中获取所有字段? 通常执行SELECT *
并不是一个很好的做法,因为您可能正在获取您可能不需要的字段。 此外,如果将来在该表中添加更多列,由于 *(星号),这些字段也将被提取。 在这里,您可以在 StackOverflow 上获得该主题的完整答案。
另一方面,根据您所说的:从 UI 作为 param 接收。
如果您不验证从 UI 传递的内容,然后将其直接放入查询中,则可以进行SQL Injection
。 如果这是生产代码,您应该尽一切努力避免它。 更多关于SQL 注射在这里。
最后,我对改进代码的建议是在 SQL 语句中使用OR 。 在这里你可以找到如何做到这一点
它将类似于(仅将其作为指导,而不是完整的解决方案):
SELECT column1, column2 -- the Columns that you really need to fetch
FROM CompanyInformation
WHERE CompanyID= companyId OR CompanyName= 'companyName' --you need to pass this properly
我希望它能为您提供一些关于如何改进它的提示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.