检查重复输入

时间:2014-04-28 15:17:20

标签: c#

我使用此代码进入。

private void button1_Click(object sender, EventArgs e)
{
    string Coonstring = "datasource=localhost;port=3306;username=root;password=****;Charset=utf8";
    string cmd = "Insert into project.name_registry (name ) values('" + this.txt.Text + "');";
    MySqlConnection connectionDatabase = new MySqlConnection(Coonstring);
    MySqlCommand cmddata = new MySqlCommand(cmd, connectionDatabase);
    MySqlDataReader myreader;

    try
    {
        connectionDatabase.Open();
        myreader = cmddata.ExecuteReader();
        MessageBox.Show("Done");
        while (myreader.Read())
        {
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

按下此按钮时我需要检查是否显示插入名称消息框,告诉我该名称是否存在并阻止添加。如果没有告诉我插入完成。我怎么能这样做。

问候

2 个答案:

答案 0 :(得分:1)

进行此类检查的最佳位置是数据库本身。几乎所有数据库都可以在字段上设置UNIQUE约束。如果将name中的name_registry列设置为唯一,则DBMS将不允许您添加具有相同名称的第二个条目,并且将引发异常。这通常是最好的方式。

如果数据库不在您手中且您无法将列设置为唯一,则可以使用@FrancisDucharme和其他人的建议并查询DB以获取给定名称,并仅调用{{1如果它返回0结果:

INSERT

注意,虽然不需要调用SELECT COUNT(*) FROM name_registry WHERE [name] = 'TheName' ,也不需要调用此单结果SELECT语句,也不需要调用上面的INSERT语句 - 您应该调用ExecuteReader,这将返回单值结果没有加载你真正不需要的全尺度ExecuteScalar

最后,作为答案的补充,我不能让你继续前进而不指向至少one tutorial关于在ADO.NET中使用参数化查询的方向,这不仅仅是在我看来,有助于防止SQL注入攻击,还有助于清理代码并使其更具可读性。那里有很多。

答案 1 :(得分:-1)

首先,如前所述:您可以看到MAJOR SQL Injections ......

其次,你应该使用params。

第三,如果你

SELECT * 
FROM [TABLE]
WHERE [ColumnName] = @Param