Вставка значений текстового поля для доступа к базе данных

Теперь у меня проблема с оператором try (int count = insert .......). Компилятор сообщает (когда я нажимаю кнопку в форме для сохранения значений в текстовых полях), что ему не удалось преобразовать значение параметра из String в Int32. код:

private void button1_Click (объект-отправитель, EventArgs e) {

       string conString = "Provider=Microsoft.Jet.OLEDB.4.0;"
     + "Data Source=C:\\Users\\Simon\\Desktop\\save.mdb";

        OleDbConnection empConnection = new OleDbConnection(conString);


        string insertStatement = "INSERT INTO obroki_save "
                             + "([ID_uporabnika],[datum],[ID_zivila],[skupaj_kalorij]) "
                             + "VALUES (@ID_uporabnika,@datum,@ID_zivila,@skupaj_kalorij)";

        OleDbCommand insertCommand = new OleDbCommand(insertStatement, empConnection);

        insertCommand.Parameters.Add("@ID_uporabnika", OleDbType.Integer).Value = users.iDTextBox.Text;
        insertCommand.Parameters.Add("@datum", OleDbType.Date).Value = DateTime.Now;
        insertCommand.Parameters.Add("@ID_zivila", OleDbType.Integer).Value = iDTextBox.Text;
        insertCommand.Parameters.Add("@skupaj_kalorij", OleDbType.Integer).Value = textBox1.Text;
        empConnection.Open();

        try
        {
           int count = insertCommand.ExecuteNonQuery();
        }
        catch (OleDbException ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            empConnection.Close();
            textBox1.Clear();
            textBox2.Clear();
            textBox3.Clear();
            textBox4.Clear();
            textBox5.Clear();
        }
    }

person simon    schedule 28.04.2010    source источник


Ответы (2)


insertCommand.Parameters.Add("@datum", OleDbType.Char).Value = DateTime.Now;

Вы вставляете дату как тип данных Char, что выглядит неправильно.

person Hans Olsson    schedule 28.04.2010
comment
tnx за ответ, но все же. Я изменил на сегодняшний день, dbdat другой db___, и все равно он показывает ту же ошибку - person simon; 28.04.2010
comment
Я заметил, что вы также не устанавливаете длину параметров, возможно, это часть проблемы. Хотя я бы посоветовал вам изменить свой вопрос, чтобы также показать, какой тип данных каждое из полей находится в БД. - person Hans Olsson; 28.04.2010
comment
все длинное целое число, просто дата - общая дата - person simon; 28.04.2010
comment
Попробуйте изменить OleDbType других на BigInt, а не на Char. - person Hans Olsson; 28.04.2010
comment
Я изменил все на OleDbType.integer и данные на OleDbType.date, и теперь я получаю сообщение об ошибке в инструкции try: Не удалось преобразовать значение параметра из String в Int32. Что мне теперь делать? - person simon; 28.04.2010
comment
В настоящее время вы просто отправляете элемент Text текстовых полей в параметры. Сначала преобразуйте эти значения в int, вы можете увидеть, как здесь msdn.microsoft.com/ en-us / library / bb397679.aspx - person Hans Olsson; 28.04.2010
comment
так что я должен преобразовать в строках insertCommand.Parameters.Add? или в конце (я пытался преобразовать в конце .... = Convert.ToIn32 (users.iDTextBox.Text);) это все еще не сработало! - person simon; 28.04.2010
comment
Я думал что-то вроде: insertCommand.Parameters.Add (@ID_uporabnika, OleDbType.Char) .Value = Convert.ToIn32 (users.iDTextBox.Text)); - person Hans Olsson; 28.04.2010
comment
вы можете обновить свой вопрос, чтобы добавить обновленный образец, эти комментарии немного сбивают с толку. - person Hans Olsson; 28.04.2010

Вам необходимо преобразовать ваши типы данных: textbox.value содержит строку, и для ее преобразования вы можете использовать int.Parse.

    insertCommand.Parameters.Add("@ID_zivila", OleDbType.Integer).Value = int.Parse(iDTextBox.Text);
    insertCommand.Parameters.Add("@skupaj_kalorij", OleDbType.Integer).Value = int.Parse(textBox1.Text);
person Whismer    schedule 05.10.2017