Как вставить в базу данных SQL Server Compact

1

Обновленный вопрос:

По какой-то причине я получил свой код, работающий (должно быть, это опечатка или что-то еще, все еще не уверен). Однако вот последняя вещь, которая меня озадачивает. У меня есть этот код:

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, он работает отлично.

  • 0
    Так что ... убери уловку и выясни какое исключение ты получаешь
  • 2
    Возможно, потому что вы не добавляете второй параметр?
Показать ещё 9 комментариев
Теги:
database
insert

2 ответа

0

Я не тестировал это, но по вашему запросу у меня возникло ощущение, что ошибка произошла из-за использования keyword в имени столбца.

name, column, number - все ключевые слова SQL. Один из способов избежать этого - поместить [] вокруг имени столбца, например INSERT INTO [column] ([name], [number]), это скажет SQL, что это имена столбцов, а не пытается вызвать функции или что-то еще. Однако моя рекомендация - всегда избегать использования ключевых слов.

Попробуйте и дайте мне знать, исправляет ли ваша ошибка.

Дополнительные советы. Поскольку вы можете получить до ExecuteNonQuery, установите там точку ExecuteNonQuery и щелкните правой кнопкой мыши и взгляните на фактический запрос, отправляемый в базу данных. Скопируйте запрос и вставьте его непосредственно в базу данных и посмотрите, выполняется ли она.

  • 0
    Я скопировал и вставил запрос из строки прерывания ExecuteNonQuery непосредственно в базу данных, где он работает. Также пробовал другую таблицу с именем 'lokatie', в которой есть столбцы 'ruimte' (INT) и 'naam' (VARCHAR). Я получаю запрос "INSERT INTO lokatie (ruimte, naam) VALUES (1, 'abc')" Запрос работает непосредственно в базе данных, но не в моем коде.
0

Попробуйте это

INSERT INTO Table_Name(column1,column2) VALUES (@Val1,@Val2)", con);
  • 0
    Спасибо, но на самом деле это то, что у меня есть. Не работает Кроме того, без параметров Add (... values (123, 'abc') это не работает.
  • 0
    @ lvo77 в чем вы получаете ошибку ??

Ещё вопросы

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