Пустая таблица базы данных

1

Я хочу вставить значения в строке "Navn" и "Varenr" в таблице DB, когда я нажимаю кнопку. У меня есть следующий код:

 private void button2_Click(object sender, EventArgs e)
    {

        using (SqlConnection cn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Produkt.mdf;Integrated Security=True"))
        {
            try
            { 
            SqlCommand cm = new SqlCommand();
            cm.Connection = cn;
            string col1 = textBox2.Text;
            string col2 = textBox3.Text;

            //generate sql statement
            cm.CommandText = "INSERT INTO ProduktTable (Navn,Varenr) VALUES (@col1,@col2)";
            //add some SqlParameters
            SqlParameter sp_add_col1 = new SqlParameter();
            sp_add_col1.ParameterName = "@col1";
            //data type in sqlserver
            sp_add_col1.SqlDbType = SqlDbType.NVarChar;
            //if your data type is not number,this property must set
            //sp_add_col1.Size = 20;
            sp_add_col1.Value = textBox2.Text;
            //add parameter into collections
            cm.Parameters.Add(sp_add_col1);
            //in your insert into statement, there are how many parameter, you must write the number of parameter
            SqlParameter sp_add_col2 = new SqlParameter();
            sp_add_col2.ParameterName = "@col2";
            //data type in sqlserver
            sp_add_col2.SqlDbType = SqlDbType.NVarChar;
            //if your data type is not number,this property must set
            //sp_add_col2.Size = 20;
            sp_add_col2.Value = textBox2.Text;
            //add parameter into collections
            cm.Parameters.Add(sp_add_col2);

            //open the DB to execute sql
            cn.Open();
            cm.ExecuteNonQuery();
            cn.Close();
                }
            catch (Exception ex)
            {
                MessageBox.Show("Error\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }                
        }
    }

Но, к сожалению, моя таблица данных по-прежнему пуста:

Изображение 174551

Я установил точку останова на функцию ExecuteNonQuery и запускается при нажатии на кнопку:

Изображение 174551

Определение моей таблицы:

Изображение 174551

  • 0
    Так что нет исключения?
  • 0
    Ну, что происходит, когда вы отлаживаете это?
Показать ещё 8 комментариев
Теги:
sql-server

2 ответа

2
Лучший ответ

Строка подключения вызывает следующее:

Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Produkt.mdf;Integrated Security=True"

|DataDirectory| Ваша база данных, которая обновляется в этом методе, находится в вашем каталоге данных приложений, а тот, который вы пытаетесь извлечь данные, находится в папке вашего проекта...

|DataDirectory| - строка подстановки, указывающая путь к базе данных. DataDirectory также упрощает совместное использование проекта, а также развертывание приложения. Для моего ПК мой каталог данных приложений:

C:\Users\MyUserName\AppData\...

Если вы перейдете к этому местоположению, а затем перейдите к следующим папкам

...\Local\Apps\2.0\Data

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

Вы также можете попробовать следующее:

Изображение 174551

Если вы заметили, что Server Explorer обнаруживает все базы данных на моем ПК, и вы можете заметить, что есть несколько файлов MINDMUSCLE.MDF но все они находятся на разных путях, это связано с тем, что в каталоге DEBUG есть один файл, один в моем каталоге PROJECT, один в моем каталоге данных APP DATA. Те, которые начинаются с цифр, хранятся в моих каталогах APP DATA... Если вы выберете свой файл базы данных и затем запустите запрос SELECT, вы получите свои данные.

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

1

Проверьте значение, возвращаемое ExecuteNonQuery. Он должен возвращать int с количеством записей, на которые ссылается оператор SQL.

Если он возвращается со значением, отличным от 0, то вы знаете, что запись вставляется где-то. Прежде чем закрыть соединение, запустите SQL-запрос к таблице, чтобы выбрать все записи и посмотреть, вернутся ли они через код.

SELECT * FROM ProduktTable

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

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

  • 0
    Спасибо за ответ. Я думаю, что данные хранятся в копии моей базы данных, расположенной в папке bin \ Debug во время выполнения. Есть ли у вас какие-либо идеи о том, как сохранить данные в моей исходной базе данных, расположенной в папке моего проекта.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню