无法使用C#Win表更新SQL数据库

时间:2015-05-31 05:15:55

标签: c# sql sql-server database visual-studio-2013

我的应用程序(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(); 
}

2 个答案:

答案 0 :(得分:0)

如果没有任何其他交易,例如TransactionScopeSqlTransaction(我们在您的代码中看不到),则没有理由回滚更新。我相信你可能实际上并没有更新你认为的数据。

虽然不一定是解决方案,但更好的做法是使用参数化查询而不是使用字符串 - 这具有安全性(Sql Injection),性能(查询计划缓存),还有助于消除与引号,转义和错误相关的错误类型转换(这可能是这种情况 - 例如,您正在插入newSum,这可能会使用引号将数值隐含到InStock中,这意味着char类型)。 e.g。

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,并且还注意到处理连接也会关闭它,所以你不需要显式关闭它(虽然这样做不会受到伤害)。

答案 1 :(得分: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(); 

同样添加断点并检查代码执行与否的天气 导致您的代码看起来很好,&应该工作