Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何验证winforms字段的唯一性_C#_Database_Winforms - Fatal编程技术网

C# 如何验证winforms字段的唯一性

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 {

我有一些代码可以在用户更新ID字段时检查唯一的值,但是我太新了,我想知道是否有更好的方法

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 Add
AddWithValue
将为您完成全部工作,而且通常会做得稍微有点错误,这可能会影响sql查询的性能。相反,您应该创建SqlParameter,然后将其添加到parameters集合中。通过“手动”创建它,您将完全控制自己的工作和方式。