C# 如何验证winforms字段的唯一性
我有一些代码可以在用户更新ID字段时检查唯一的值,但是我太新了,我想知道是否有更好的方法C# 如何验证winforms字段的唯一性,c#,database,winforms,C#,Database,Winforms,我有一些代码可以在用户更新ID字段时检查唯一的值,但是我太新了,我想知道是否有更好的方法 private void tbPrinterID_Validating(object sender, CancelEventArgs e) { using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.LazerMaintenance_Conn)) { try {
private void tbPrinterID_Validating(object sender, CancelEventArgs e)
{
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.LazerMaintenance_Conn))
{
try
{
string query = "SELECT COUNT(*) as Count FROM Printers WHERE PrinterID = '" + tbPrinterID.Text + "'";
SqlDataAdapter da = new SqlDataAdapter(query, conn);
DataTable dt = new DataTable();
da.Fill(dt);
if ((Int32)dt.Rows[0]["Count"] > 0)
{
MessageBox.Show("There is already a printer with ID = " + tbPrinterID.Text);
}
}
catch (Exception ex)
{
MessageBox.Show("Error occured! : " + ex);
}
}
}
您的示例易受SQL注入攻击,我建议您阅读本文 您可以使查询更地道一点:
var sql = "SELECT 1 FROM Printers WHERE PrinterID = @IdToCheck";
using (var command = new SqlCommand(sql, con))
{
command.Parameters.AddWithValue("@IdToCheck", tbPrinterID.Text);
con.Open();
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
..........
}
}
}
使用数据表是非常浪费的。带有ExecuteScalar的SqlCommand要好得多。并且一定要使用参数,想想如果有人写
,会发生什么;滴台打印机--代码>作为文本…不相关,但如果您想提高性能,使用AddWithValue
不是最佳选择。@Fabio为了简单起见,我喜欢AddWithValue,对于那些感兴趣的人,这里讨论AddWithValue vs AddAddWithValue
将为您完成全部工作,而且通常会做得稍微有点错误,这可能会影响sql查询的性能。相反,您应该创建SqlParameter,然后将其添加到parameters集合中。通过“手动”创建它,您将完全控制自己的工作和方式。