2012-02-21 5 views
2

Имя моей таблицы: Customer. Он имеет четыре столбцаДанные не вставляются в таблицу?

CustomerId 
CustomerName 
CustomerAddress 
PhoneNo 

Это мой код C#. Я не получаю никаких исключений, и данные не вставляются в базу данных.

string connString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\VictoryDatabase.mdf;Integrated Security=True;User Instance=True"; 
SqlConnection myConnection = new SqlConnection(connString); 

try 
{ 
    myConnection.Open(); 
    string query = "insert into Customer(CustomerName,CustomerAddress,PhoneNo) values (@CustNm,'@CustAdd',@Ph)"; 
    SqlCommand myCommand = new SqlCommand(query,myConnection); 
    myCommand.Parameters.AddWithValue("CustNm",Print[0].CustomerName); 
    myCommand.Parameters.AddWithValue("CustAdd",Print[0].Address); 
    myCommand.Parameters.AddWithValue("Ph",Print[0].Telephone); 

    Console.WriteLine(Print[0].Telephone); 

    myCommand.ExecuteNonQuery(); 
    myConnection.Close(); 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e.ToString()); 
} 
+0

разъяснений .. вы не получаете никаких строк, вставленные в все или вставляет пустую строку? – NoCarrier

+0

Что возвращает ExecuteNonQuery? –

+0

Устанавливается ли CustomerId как автоматическая установка PK в таблице Customer? Кроме того, вам не нужна одиночная кавычка (') в параметре' @CustAdd '; –

ответ

6

Как я уже говорил на этом сайте - весь код User Instance и AttachDbFileName = ошибочен - в лучшем случае! Visual Studio будет копировать файл .mdf и , скорее всего,, ваш INSERT работает просто отлично - но вы просто смотрите на неверный файл .mdf в конце!

Если вы хотите придерживаться такого подхода, попробуйте положить точку останова на вызов myConnection.Close(), а затем проверить файл .mdf с помощью SQL Server Mgmt Studio Express. Я почти уверен, что ваши данные есть.

реальное решение на мой взгляд, было бы

  1. установки SQL Server Express (и вы уже сделали это в любом случае)

  2. установки SQL Server Management Studio Express

  3. создать свою базу данных в SSMS Express, дать ему логическое имя (например,VictoryDatabase)

  4. подключиться к нему с помощью своего логического имя базы данных (учитывая при ее создании на сервере) - и не возиться с физическими файлами баз данных и пользовательских экземпляров. В этом случае строка подключения будет что-то вроде:

    Data Source=.\\SQLEXPRESS;Database=VictoryDatabase;Integrated Security=True 
    

    и все остальное точно же, как раньше ...

+0

+100 - там должен быть учебник, в котором описывается этот подход «Пользовательский экземпляр», и в мелкой печати говорится: «PS не использует это». –

+0

@AaronBertrand: да, скорее всего, еще не нашел его (в обширном море документации MSDN .....) –

+0

Но я уже создал базу данных из 8 таблиц в базе данных visualstudio. База данных будет переноситься на 'SQL Server Management Studio Express' –

0
  1. Вы уверены, что вы смотрите на правой базе данных, чтобы убедиться, что никакие данные не вставляется?
  2. Выполняется ли эта вставка в контексте транзакции, которая не совершена?
0

Вы не определил те же paramets, (забыл добавить «@» делать это нравится:.

string query = "insert into Customer(CustomerName,CustomerAddress,PhoneNo) values (@CustNm,'@CustAdd',@Ph)"; 
     SqlCommand myCommand = new SqlCommand(query,myConnection); 
     myCommand.Parameters.AddWithValue("@CustNm",Print[0].CustomerName); 
     myCommand.Parameters.AddWithValue("@CustAdd",Print[0].Address); 
     myCommand.Parameters.AddWithValue("@Ph",Print[0].Telephone); 
1

Что вы говорите, просто не бывает Либо запрос будет вставить запись, или вы получит исключение

Существует ошибка в запросе, хотя Там не должен быть апострофы вокруг параметра @CustAdd, что сделает базу данных интерпретировать это как буквенную строку, а не параметр:..

string query = "insert into Customer(CustomerName,CustomerAddress,PhoneNo) values (@CustNm,@CustAdd,@Ph)"; 

Я не уверен, как будет реагировать база данных, но вы либо получите исключение, сообщив вам, что у вас есть параметр, который никогда не используется в запросе, или он вставляет запись со значением @CustAdd в качестве адреса ,

+0

Извините, но это не сработало Спасибо за указание ошибки. –

0

Устанавливается ли CustomerId как автоматическая установка ПК на столе Customer? Кроме того, вам не нужна одиночная кавычка (') в параметре' @CustAdd ';

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