像往常一样,永远不要使用字符串连接来构建 sql 命令。使用参数化查询
string query = "SELECT * FROM [Contact Management] WHERE Mobile=@mobile OR Name=@name";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@mobile", Convert.ToInt32(txtSearch.Text));
cmd.Parameters.AddWithValue("@name", txtSearch.Text);
SqlDataAdapter da= new SqlDataAdapter (cmd);
参数化查询将使您的数据库免受 Sql Injection Attacks 以及解析输入文本时出现的问题。如果在搜索文本中有一个单引号怎么办?连接时会出现语法错误。
但是,让我说您的代码在此之前会失败。如果您的 txtSearch 中有一个数字,那么一切都会正常工作,但如果您有一个字符串。使用 Convert.ToInt32 转换为数字将失败。更好用
SqlCommand cmd = new SqlCommand();
string query;
int numSearch;
if(Int32.TryParse(txtSearch.Text, out numSearch))
{
query = "SELECT * FROM [Contact Management] WHERE Mobile=@p1";
cmd.Parameters.AddWithValue("@p1", numSearch);
}
else
{
query = "SELECT * FROM [Contact Management] WHERE Name=@p1";
cmd.Parameters.AddWithValue("@p1", txtSearch.Text);
}
cmd.CommandText = query;
....