Удалить из базы данных в c # - PullRequest
1 голос
/ 14 июня 2011

Я пишу приложение на C # WPF с VS10 express. Я должен сказать, что я очень новичок в C # и VS, но я искал много примеров в Google, я действительно пытался решить эту проблему самостоятельно ..

У меня есть локальная база данных (mydatabase.sdf), и при загрузке моего окна я заполняю таблицу этой базы данных некоторыми данными. Одно из полей этой таблицы нуждается в уникальном значении, поэтому я хочу добавить в каждую загрузку одни и те же данные, но я получаю ошибку, отличную от курса.

Я хочу удалить все данные из базы данных, прежде чем пополнять, это кажется очень простым, но у меня не получается ...

Я пытался

dataset.Tables["mytable"].Clear()

, который не работает, похоже, он удаляет только данные из таблицы данных (dataTable), но не из хранилища данных.

также я пытался:

for (int i = 0; i < dataset.Tables["mytable"].Rows.Count; i++)
{
  dataset.Tables["mytable"].Rows[i].Delete();
}
  this.TableAdapter.Update(this.dataset);

Но при запуске оператор dataset.Tables["mytable"].Rows.Count возвращает ноль при запуске, но если я добавлю свои данные, я получу "ошибку уникального значения".

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

Невозможно сделать это поле в базе данных неуникальным по причинам разработки.

Как действительно удалить данные из хранилища данных / базы данных (mydatabase.sdf) при загрузке моей программы ??

EDIT

Вот код, как я заполняю базу данных данными:

public void FillInternet()
    {
        klantenTableAdapter1.ClearBeforeFill = false;


        string MyConString =    "SERVER=myserver;" +
                                "DATABASE=mydb;" +
                                "UID=myuid;" +
                                "PASSWORD=mypass;";

        MySqlConnection connection = new MySqlConnection(MyConString);
        MySqlCommand command = connection.CreateCommand();
        MySqlDataReader Reader;
        command.CommandText = "SELECT klantnr, voorletters, roepnaam, achternaam, tussenvoegsel, meisjesnaam, straat, huisnr, subhuisnr, postcode, plaats, telthuis, telmobiel, telwerk, fax, email, geboortedatum FROM klanten ORDER BY klantnr";
        connection.Open();
        Reader = command.ExecuteReader();


        try
        {
            while (Reader.Read())
            {
                DataRow newLogRow = dataset1.Tables["klanten"].NewRow();
                var thisrow = "";

                for (int i = 0; i < Reader.FieldCount; i++)
                {
                    thisrow = Reader.GetValue(i).ToString();
                    newLogRow[Reader.GetName(i)] = thisrow;
                }

                dataset1.Tables["klanten"].Rows.Add(newLogRow);
                this.klantenTableAdapter1.Update(this.dataset1);
            }
            connection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex.Message,"Fout",MessageBoxButton.OK,MessageBoxImage.Error);
        }

        dataset1.AcceptChanges();

        //Fill from internet
        //da.Fill(dataset1.klanten);

        //Fill from local database
        klantenTableAdapter1.Fill(dataset1.klanten);

        this.klantenTableAdapter1.Update(this.dataset1);

        this.DataContext = dataset1.klanten.DefaultView;
}

Ответы [ 2 ]

3 голосов
/ 14 июня 2011

ADO.NET использует «отключенную» модель набора записей.Он хранит копию данных в структурах на стороне клиента (DataSet и DataTable).Обновления / вставки / удаления, внесенные в структуры на стороне клиента, необходимо отправить обратно в базу данных.Вам необходимо ознакомиться с ADO.NET, чтобы получить общее представление об этом процессе и получить представление о модели событий ADO.NET, которая понадобится, если вы захотите сделать что-нибудь, что связано с типичными реальными сложностями.На ADO.NET написано много книг, потому что это многофункциональный слой данных среднего уровня со значительными сложностями.

Для ваших целей вы можете прочитать об объекте ADO.NET Command и SQL "удалить "команда.Вам также необходимо изучить, как ADO.NET обрабатывает автоинкрементные первичные ключи, что является одним из самых хитрых аспектов отключенной модели.

Если база данных сама определяет автоинкрементный ключ, вы не можете указать это значение при вставке новогострок, если вы не отключите автоматическое увеличение временно в серверной части.Это не проблема ADO.NET, кстати.Это 100% бэк-энда.

0 голосов
/ 14 июня 2011

Из других ваших постов я исходил из предположения, что ваша база данных на этом тоже MySQL. Вы упоминаете уникальный столбец, который обычно означает столбец с автоинкрементом. Если вы «удалите» записи после того, как вы их построили (скажем, начиная с 1-10), а затем попытаетесь повторно добавить в следующий цикл те же самые элементы 1-10, он может подавиться, давая вам это сообщение. Если вы добавляете числа в таблицу, начиная с последней использованной ... посмотрите, поможет ли это.

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