Я хочу вставить значения в строке "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);
}
}
}
Но, к сожалению, моя таблица данных по-прежнему пуста:
Я установил точку останова на функцию ExecuteNonQuery и запускается при нажатии на кнопку:
Определение моей таблицы:
Строка подключения вызывает следующее:
Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Produkt.mdf;Integrated Security=True"
|DataDirectory|
Ваша база данных, которая обновляется в этом методе, находится в вашем каталоге данных приложений, а тот, который вы пытаетесь извлечь данные, находится в папке вашего проекта...
|DataDirectory|
- строка подстановки, указывающая путь к базе данных. DataDirectory
также упрощает совместное использование проекта, а также развертывание приложения. Для моего ПК мой каталог данных приложений:
C:\Users\MyUserName\AppData\...
Если вы перейдете к этому местоположению, а затем перейдите к следующим папкам
...\Local\Apps\2.0\Data
Вы сможете найти свою конкретную директорию приложения, которая, вероятно, хранится с вашим именем сборки или какой-то хэш, когда вы туда поедете, вы обнаружите, что база данных там обновляется просто отлично. Эта строка соединения лучше всего подходит для развертывания.
Вы также можете попробовать следующее:
Если вы заметили, что Server Explorer обнаруживает все базы данных на моем ПК, и вы можете заметить, что есть несколько файлов MINDMUSCLE.MDF
но все они находятся на разных путях, это связано с тем, что в каталоге DEBUG
есть один файл, один в моем каталоге PROJECT
, один в моем каталоге данных APP DATA
. Те, которые начинаются с цифр, хранятся в моих каталогах APP DATA
... Если вы выберете свой файл базы данных и затем запустите запрос SELECT
, вы получите свои данные.
Некоторое время назад я сделал учебник. Может быть, это поможет вам:
Проверьте значение, возвращаемое ExecuteNonQuery. Он должен возвращать int с количеством записей, на которые ссылается оператор SQL.
Если он возвращается со значением, отличным от 0, то вы знаете, что запись вставляется где-то. Прежде чем закрыть соединение, запустите SQL-запрос к таблице, чтобы выбрать все записи и посмотреть, вернутся ли они через код.
SELECT * FROM ProduktTable
Если вы получаете некоторые записи, вам может потребоваться дважды проверить базу данных, которую вы просматриваете через среду IDE, и одну вашу вставку записей через код. Возможно, у вас есть две разные базы данных, и вы запрашиваете их при вставке в другую.
Это те шаги, которые я проведу, чтобы помочь сузить проблему и походить на то, что я, вероятно, сделал раньше. Я надеюсь, что это помогает!