我的应用程序(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();
}
答案 0 :(得分:0)
如果没有任何其他交易,例如TransactionScope
或SqlTransaction
(我们在您的代码中看不到),则没有理由回滚更新。我相信你可能实际上并没有更新你认为的数据。
虽然不一定是解决方案,但更好的做法是使用参数化查询而不是使用字符串 - 这具有安全性(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();
同样添加断点并检查代码执行与否的天气 导致您的代码看起来很好,&应该工作