Обновленный вопрос:
По какой-то причине я получил свой код, работающий (должно быть, это опечатка или что-то еще, все еще не уверен). Однако вот последняя вещь, которая меня озадачивает. У меня есть этот код:
string strConn = @"Data Source = |DataDirectory|\Database\DbFilm.sdf;Persist Security Info=False";
string insQuery = "INSERT INTO film (naam, medium_id, genre_id, land_id, jaar, lengte, videoformaat_id) VALUES (@naam, @medium_id, @genre_id, @land_id, @jaar, @lengte, @videoformaat_id)";
using (SqlCeConnection con = new SqlCeConnection(strConn))
{
con.Open();
using (SqlCeCommand Query = new SqlCeCommand(insQuery, con))
{
Query.Parameters.AddWithValue("@naam", dbNaam);
Query.Parameters.AddWithValue("@medium_id", dbMedium_id);
Query.Parameters.AddWithValue("@genre_id", dbGenre_id);
Query.Parameters.AddWithValue("@land_id", dbLand_id);
Query.Parameters.AddWithValue("@jaar", dbJaar);
Query.Parameters.AddWithValue("@lengte", dbLengte);
Query.Parameters.AddWithValue("@videoformaat_id", dbVideoformaat_id);
Query.CommandType = System.Data.CommandType.Text;
Query.ExecuteNonQuery();
{
con.Close();
}
}
Это не работает. Я не получаю сообщение об ошибке, но моя база данных не получает вставки. Когда я нарушаю ExecuteNonQuery
, я замечаю, что полученный запрос не получил правильные значения для @parameters
. Таким образом, фактический запрос выглядит (короче) примерно так:
INSERT INTO film (naam, medium_id) VALUES (@naam, @medium_id)
Но это должно быть что-то вроде:
INSERT INTO film (naam, medium_id) VALUES ('title1', 'disc1')
Что мне делать, чтобы получить значения из строк (dbNaam
, dbMedium_id
и т.д.) Вместо @naam
, @medium_id
в моем запросе?
PS Когда я использую этот код с запросом, который не использует AddWithValue, он работает отлично.
Я не тестировал это, но по вашему запросу у меня возникло ощущение, что ошибка произошла из-за использования keyword
в имени столбца.
name
, column
, number
- все ключевые слова SQL. Один из способов избежать этого - поместить []
вокруг имени столбца, например INSERT INTO [column] ([name], [number])
, это скажет SQL, что это имена столбцов, а не пытается вызвать функции или что-то еще. Однако моя рекомендация - всегда избегать использования ключевых слов.
Попробуйте и дайте мне знать, исправляет ли ваша ошибка.
Дополнительные советы. Поскольку вы можете получить до ExecuteNonQuery
, установите там точку ExecuteNonQuery
и щелкните правой кнопкой мыши и взгляните на фактический запрос, отправляемый в базу данных. Скопируйте запрос и вставьте его непосредственно в базу данных и посмотрите, выполняется ли она.
Попробуйте это
INSERT INTO Table_Name(column1,column2) VALUES (@Val1,@Val2)", con);