2010-09-11 3 views
3

Я просмотрел страницы MSDN, чтобы узнать ADO.Net с помощью команд. Я могу читать, используя пример кода, размещенный там.ADO.Net - Почему вставка не происходит?

Но когда я попытался использовать код модификации ниже, вставка не происходит. Я не понимаю, почему. Может кто-нибудь, пожалуйста, скажите мне, что не так с этим кодом?

string connectionString = "A_VALID_CONNECTION_STRING"; 
string commandText = 
"INSERT INTO Contacts (FullName, Mobile) VALUES ('Pierce Brosnan', '1800-007')"; 

SqlConnection connection = new SqlConnection(connectionString);   

try 
{ 
    connection.Open(); 
    SqlCommand command = new SqlCommand(commandText, connection); 
    Console.WriteLine(command.ExecuteNonQuery()); 
    connection.Close(); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

Редактировать

  • Исключение не отбрасывается.

  • ExecuteNonQuery(), который должен возвращать no. из затронутых строк возвращается 1.

  • Окружающая среда: Visual C# 2010 Express | SQL Server 2008 Express | Windows 7 Ultimate 32-бит.

Update

  1. Раньше я использовал MDF файл, присутствующую в проекте. Это было, я думаю, автоматически привязано к экземпляру SQL-сервера при каждом запуске проекта. Это когда у меня возникла проблема. Строка подключения содержит некоторую информацию о прикреплении файла базы данных.

  2. Я удалил SQL Server 2008 Express, который я установил вместе с Visual C# 2010 Express. Также удалили MDF-файл из проекта.

  3. Я отдельно загрузил и установил SQL Server 2008 Express вместе с Management Studio Express.

  4. Создана новая база данных в студии управления.

  5. Использовал другой тип строки подключения, чтобы использовать базу данных на сервере.

Теперь INSERT работает!

P.S. Наверное, я должен был упомянуть, что у меня был сценарий файла прикрепленной базы данных. Очень жаль это.

+0

Исключено ли исключение? –

+0

№ Никакое исключение не выбрасывается (или не печатается). Console.WriteLine печатает '1'. Но когда я вижу таблицу базы данных, ничего не вставлено. Я просматриваю данные с помощью проводника базы данных в C# 2010 Express IDE. – 2010-09-11 10:57:12

+0

Это действительно странно. Ваш код выглядит отлично, и если '1' напечатан, это означает, что была вставлена ​​одна строка. –

ответ

3

Мое подозрение в том, что вы имели следующий сценарий:

  • Database.mdf файл присутствовал в проекте со структурой таблицы, созданной в нем
  • строку соединения посмотрел что-то вроде этого Server=.\SQLExpress;AttachDbFilename=database.mdf;Database=dbname; Trusted_Connection=Yes;, т.е. загружающего базы данных в строке подключения.

Происходящее был, когда вы построили/побежал ваш проект, ваша заявка была составлена ​​и файл database.mdf был скопирован вместе с ним ApplicationProjectFolder\bin\Debug, так что, когда приложение было запущенно, файл database.mdf присутствовал.Это означает, что каждый раз, когда вы запускали свой проект, «пустой» файл database.mdf был скопирован с ApplicationProjectFolder\database.mdf на ApplicationProjectFolder\bin\Debug\database.mdf, поэтому данные «исчезают». Кроме того, файл database.mdf, вероятно, имел «Копировать всегда» в его свойствах в проекте.

Итак, «INSERT» работал, он просто «перезагружался» каждый раз, когда вы запускали приложение.

+0

Где ты был последний день? : P Большое спасибо за объяснение ПОЧЕМУ теперь начали работать! :) Как я уже сказал, если бы я полностью упомянул сценарий, я мог бы получить ответ раньше: | .. и +1 – 2010-09-11 16:21:30

+0

@Senthil, не проблема. Раньше у меня было то же самое со мной, по общему признанию, с базой данных Sql Server Ce, но основной остается. Как только я увидел ваш вопрос, я знал, что происходит =) PS - У вас есть шанс на победу, как и на принятие? ;-) – Rob

+0

Ха, разве это не написано в Уставе этикета, что вы не должны просить голосов? Кроме того, как вы рассчитываете заработать значок Tenacious? (+1) – JohnB

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