Я хочу, когда я заполняю свою базу данных, если значение является ПОВТОРЕННЫМ, то появилась ошибка - PullRequest
0 голосов
/ 11 мая 2009

Я использую этот код, пока не увижу данные в своей базе данных и не отредактирую, не удалю и не вставлю в них данные. но я хочу, чтобы, когда я вставляю данные в базу данных, это не ПОВТОРЯЕТСЯ, а если это ПОВТОРЯЕТСЯ, покажите мне сообщение об этом.

Код:

private void btnok_Click(object sender, EventArgs e)
    {
        string id = idTextBox.Text.ToString();
        string name = nameTextBox.Text.ToString();
        string family = familyTextBox.Text.ToString();
        table1BindingSource.EndEdit();
        table1TableAdapter.Update(database1DataSet.Table1);

    }

    private void butins_Click(object sender, EventArgs e)
    {
        table1BindingSource.AddNew();
    }

    private void butdelete_Click(object sender, EventArgs e)
    {
        table1BindingSource.RemoveCurrent();
        table1TableAdapter.Update(database1DataSet.Table1);
    }

    private void butedit_Click(object sender, EventArgs e)
    {
        table1BindingSource.EndEdit();
        table1TableAdapter.Update(database1DataSet.Table1);
    }

Я пишу этот запрос, но я не знаю, как я могу это использовать? Я пишу это в «Database1DataSet.xsd», а в Tableadapter появились fillby () и gatedataby ().

запрос:

SELECT     id, name, family
FROM         Table1
WHERE     (id = @id) AND (name = @name) AND (family = @family)

Ответы [ 2 ]

1 голос
/ 11 мая 2009

Ну, вы могли бы поместить в базу данных уникальное ограничение, охватывающее интересующие столбцы (предположительно [id], [name] и [family]) ..., которые будут очень хорошо предотвращать дублирование (вызывая исключение, которое вы можете поймать и окно сообщения соответственно).

Другой подход заключается в том, чтобы сначала проверить существующие значения, но если вы не используете что-то вроде сериализуемого уровня изоляции, у вас все еще есть состояние гонки.

0 голосов
/ 11 мая 2009

Я бы посоветовал вам следовать ответу Марка.

Исключением, которое вы поймаете, является SqlException с ошибкой 2601, это может быть что-то вроде этого:

catch(System.Data.SqlClient.SqlException lExSql)
{
    if(lExSql.Number == 2601)
        return Result.Duplicate;
    else
        return Result.Failure;
}
catch
{
    return Result.Failure;
}

Также примечание: нет необходимости вызывать TextBox.Text.ToString (), поскольку свойство Text является самой строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...