防止DataGridView中的重复名称

时间:2014-04-29 08:50:00

标签: c#

当我在数据库表中插入名称时,我正在使用此代码来检查和防止重复的名称。因此,如果名称存在,它将阻止插入,并将显示一个MessageBox警告名称存在。如果没有,则显示MessageBox,确认操作已完成。

string Coonstring = "datasource=localhost;port=3306;username=root;password=****;Charset=utf8";

using (MySqlConnection connectionDatabase = new MySqlConnection(Coonstring))
{
    try
    {
        connectionDatabase.Open();
        using (MySqlCommand select = new MySqlCommand("SELECT COUNT(*) FROM project.name_registry WHERE Name=@NM", connectionDatabase))
        {
            select.Parameters.AddWithValue("@NM", txt.Text);
            if (select.ExecuteScalar() != 0)
            {
                MessageBox.Show("Name exists");
                return;
            }
        }
        using (MySqlCommand cmddata = new MySqlCommand("INSERT INTO project.name_registry (name) VALUES(@NM)", connectionDatabase))
        {
            cmddata.Parameters.AddWithValue("@NM", txt.Text);
            cmddata.ExecuteNonQuery();
            MessageBox.Show("Done");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

我的问题是当我运行上面的代码时,会抛出以下错误

  
    

指定的演员表无效。

  

这是什么意思?

4 个答案:

答案 0 :(得分:1)

if (select.ExecuteScalar() != 0)
{
    MessageBox.Show("Name exists");
    return;
}

使用

if(int.Parse(select.ExecuteScalar()) !=0)

答案 1 :(得分:0)

使用解析或强制转换

if ((Int32)select.ExecuteScalar() != 0)
{
    MessageBox.Show("Name exists");
    return;
} 

if(int.parse(select.ExecuteScalar().ToString())!=0)
{
MessageBox.Show("Name exists");
        return;
}

答案 2 :(得分:0)

两者都有解析

if (int.Parse(select.ExecuteScalar()) != 0)
{
    MessageBox.Show("Name exists");
    return;
}

或者施放

if (((int)select.ExecuteScalar()) != 0)
{
    MessageBox.Show("Name exists");
    return;
}

应该有用。

答案 3 :(得分:0)

也许是这样的?

var count = 0;
var obj = select.ExecuteScalar();
if(obj != null)
{
    count = Convert.ToInt32(obj);

    if(count != 0)
    {
        MessageBox.Show("Name exists");
        return;
    }
}
else
{
    throw new Excepion();
}