2014-06-07 5 views
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); 
      }     
     } 
    } 

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

enter image description here

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

enter image description here

Мое определение таблицы:

enter image description here

+0

Итак, не исключение? –

+0

Ну, что происходит, когда вы его отлаживаете? – Amy

+0

№ Нет. Не исключение. –

ответ

2

Ваша строка соединения является причиной этого:

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

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

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

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

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

...\Local\Apps\2.0\Data 

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

Вы также можете попробовать это:

enter image description here

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

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

1

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

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

SELECT * FROM ProduktTable 

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

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

+0

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

Смежные вопросы