我有一个方法来检查一个名字是否已经存在于DB中。我现在做的方法是,首先我通过公司ID获取公司名称,然后我检查名称与我从 UI
作为一个param。
现在当前的代码是巨大的,有没有什么最简单的方法,或者我可以改进当前的代码。
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;
}
我想至少有几个方法可以使它更容易或改进你的代码.但让我建议几个 考虑 我认为这很重要。
... Do you need to fetch 都 的领域 公司信息 桌?SELECT *
并不是一个很好的做法,因为你可能会获取一些你不需要的字段。此外,如果将来有更多的列被添加到该表中,由于*(星号)的存在,这些字段也会被提取。该主题的完整答案在StackOverflow上。.
另一方面,根据你说的,关于: 从UI接收到的信息作为一个参数.
A SQL Injection
如果你不验证从UI传递过来的内容,然后直接把它放到你的Query中,那么就会出现这样的情况。如果是这样 生产代码 你应该尽量避免它。更多关于 这里有SQL注入.
最后,我的建议是改进你的代码,使用一个叫做 或 在你的SQL语句中。这里你可以找到如何做到这一点
它将会是类似于(只把它作为一个准则,而不是作为一个完整的解决方案)。
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
我希望它能给你提供一些关于如何改进它的提示。
我会选择这样的东西。调试它,因为我还没有完全测试过它。
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;
}