2013-11-14 3 views
1

Когда я вставляю данные, я могу их прочитать в DATAGRIDVIEW, но я не могу найти сохраненные данные в таблице1 при чтении их из databse explorer, кроме того, после этого я теряю данные DATAGRIDVIEW.Вставить данные в таблицу

Это правильный способ отправить данные в базу данных?

conn.ConnectionString = 
    "Persist Security Info = False; Data Source = 'table1.sdf';" + 
    "Password = '....'; File Mode = 'shared read'; " + 
    "Max Database Size = 256; Max Buffer Size = 1024"; 

conn.Open(); 
SqlCeCommand cmd = new SqlCeCommand("INSERT INTO Tp_Inr_Dosage (date, Tp, Inr, LastDosage, NewDosage, pathology_level, Pathology, idpatient) values('" + DateTime.Now.ToString() + "', " + tpTextBox.Text.Replace(",", ".") + ", " + inrTextBox.Text.Replace(",", ".") + " ," + lastDosageTextBox.Text.Replace(",", ".") + ", " + newDosageTextBox.Text.Replace(",", ".") + " ," + pathologyComboBox.SelectedIndex + " , '" + pathologyComboBox.SelectedItem + "', '" + patient + "')", conn); 

cmd.ExecuteNonQuery(); 
conn.Close(); 

Это как мои данные идут в буфер только, он никогда не достигнет БД При

+0

Есть ли какое-либо исключение/сообщение об ошибке? Возможно, это о-так-распространенный «Я смотрю на /MyProject/table1.sdf вместо /MyProject/bin/debug/table1.sdf? Не связан: вы не должны конкатенировать SQL, как это, вы действительно *** * ** необходимо использовать параметры –

+0

Привет, Нет ошибок, код работает хорошо, я просто не могу найти свои данные в базе данных. Я теряю все данные в datgridview после открытия таблицы в базе данных explorer – boularouk

+0

Вы действительно не могли придумать лучшего чем это? Что-то, что более подробно описывает вашу проблему? –

ответ

0

более элегантный способ сделать вставку является:

string query = "INSERT INTO Tp_Inr_Dosage (date, Tp, Inr, LastDosage, NewDosage, pathology_level, Pathology, idpatient) VALUES (@date, @Tp, @InRowChangingEventException, @LastDosage, @NewDosage, @pathology_level, @Pathology, @idpatient)"; 

SqlCeCommand cmd = new SqlCeCommand(query); 

cmd.CommandType = CommandType.Text; 
cmd.Parameters.AddWithValue(new SqlParameter("@date", DateTime.Now)); 
cmd.Parameters.AddWithValue(new SqlParameter("@Tp", string.Empty)); 
cmd.Parameters.AddWithValue(new SqlParameter("@InRowChangingEventException", string.Empty)); 
// etc. 

cmd.ExecuteNonQuery(); 
+0

Вам не нужен 'CommandType.Text'. Это «Текст» по умолчанию. –

+0

Чтобы повторить комментарий по очень похожим (теперь удаленным) ответам: «Это не отвечает на его вопрос, поскольку использование конкатенации строк не является источником его проблемы.Да, он должен использовать параметры, но это другая проблема ». - Руководство по использованию параметров - это очень хорошая идея, но вряд ли она будет связана с фактической проблемой. –

+0

Думаю, что это не проблема. – boularouk

0

Я обнаружил, что sqlCommands будет иметь тенденцию для бесшумного сбоя: заключите этот процесс в общий блок try/catch, чтобы увидеть, что он не выполняет правильно. Что-то вроде:

try 
{ 
    conn.Open(); 
    SqlCeCommand cmd = new SqlCeCommand(ParameterisedSQlQueryText, conn); 
    //Put your parameters in here 
    cmd.ExecuteNonQuery(); 
} 
catch (Exception ex) {MessageBox.Show(ex.Message);} 
finally {conn.Close();} 

ex Сообщение обычно является хорошим показателем того, что пошло не так в этих случаях.

+0

Это молчал, тогда по определению он не метался, если бы он метался, OP заметил бы, скорее всего, –

+0

Вообще, но у меня были эти проблемы (с OleDBCommands, хотя), где он не бросает, но если я попытаюсь/поймаю это, покажет мне, что случилось. Нет, я не знаю почему. – TJennings

+0

Привет, я пробовал, без ошибок – boularouk

1

В IDE у вас может быть файл базы данных (sdf, mdf или аналогичный) внутри структуры проекта; возможно, в MyProject\table1.sdf, или, может быть, в MyProject\Data\table1.sdf. Когда вы используете инструменты IDE для поиска базы данных, это файл, который вы ищете.

Однако, когда вы строите свой проект, файлы проекта записываются (копируются) на место сборки - так что-то вроде:

  • MyProject\bin\debug\table1.sdf
  • MyProject\bin\release\table1.sdf
  • MyProject\bin\release\Data\table1.sdf

Когда вы используете приложение ru ns, редактирует файл в месте построения. Любые изменения, внесенные вами в данные, видны только в этой копии файла. Итак: если вы используете какие-либо инструменты для просмотра базы данных, вам нужно обязательно сделать . вы просматриваете файл в месте сборки, а не в исходном местоположении проекта.

+0

Хорошо, моя таблица находится в корне MyProject \ table1.sdf. но почему я не могу найти свои данные в datagridview после этого. – boularouk

+0

@boularouk невозможно прокомментировать, не зная, как вы заполняете это datagridview, и * когда * данные для этого были сделаны. Но: * приложение * не смотрит на MyProject \ table1.sdf - он смотрит на MyProject \ bin \ debug \ table1.sdf –

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