2015-05-31 2 views
0

Мое приложение (C# Win Form) отлично работало некоторое время назад - i.e (Обновление, вставка, удаление ...). Но после закрытия программы и открытия базы данных изменений не происходит.Не удалось обновить базу данных SQL, используя C# Win Form

У меня нет ошибок во время работы. Я использую VS2013 профессионала, базу данных SQL, C#.

using (SqlConnection connection = new SqlConnection(conString)) 
{ 
    SqlCommand cmd = new SqlCommand("UPDATE [FullInk] SET [InStock] = '" + 
      newSum + "' Where [Catalog] = '" + catalog + "'"); 
    cmd.CommandType = CommandType.Text; 
    cmd.Connection = connection; 
    connection.Open(); 
    cmd.ExecuteNonQuery();  
    connection.Close(); 
} 
+1

Упоминание/Предоставление некоторого кода ... чтобы мы могли понять и отслеживать проблему. –

+2

Вы не совершаете транзакции, и закрытие приложения вызывает откат, чтобы потерять изменения? –

+0

Возможно, это проблема. но сначала это сработало, и я не изменил код. – user3661263

ответ

0

При отсутствии какой-либо дополнительной операции, такие как TransactionScope или SqlTransaction (который мы не можем видеть в своем коде), нет никаких причин, почему обновление будет откат. Я считаю, что вы, возможно, не обновляете данные, которые считаете.

Хотя это не обязательно решение, гораздо лучше использовать параметризованные запросы, а не использовать строки - это имеет безопасность (Sql Injection), производительность (кэширование плана запроса), а также помогает устранить ошибки, связанные с кавычками, и преобразование типов (что может быть здесь, например, вы вставляете newSum, что может означать числовое значение в InStock с использованием кавычек, что подразумевает тип char). например

using (var connection = new SqlConnection(conString)) 
using (var cmd = new SqlCommand("UPDATE [FullInk] SET [InStock] = @InStock Where [Catalog] = @Catalog")) 
{ 
    cmd.CommandType = CommandType.Text; 
    cmd.Connection = connection; 
    cmd.Parameters.AddWithValue("@InStock", newSum); 
    cmd.Parameters.AddWithValue("@Catalog", catalog); 
    connection.Open(); 
    cmd.ExecuteNonQuery();  
} 

Другие незначительные изменения включают утилизации SqlCommand, а также отметить, что располагая соединение также закрыть его, так что вам не нужно явно закрыть его (хотя это и не повредит).

0

Попробуйте это: Это может работать для вас ...

string Query = "UPDATE FullInk SET InStock = '" + newSum + "' Where Catalog = '" + catalog + "'"; 
    SqlConnection connection = new SqlConnection(conString); 
    connection.Open(); 
    SqlCommand cmd = new SqlCommand(Query, sql_con); 
    cmd.ExecuteNonQuery();  
    connection.Close(); 

Также добавить контрольные точки и проверить погоду ваш код выполняется или не Причина ваш код кажется нормально, & должен работать