无法使用C#Win表单更新SQL数据库
我的申请(C#Win表格)在不久前运行良好,即(更新、插入、删除…)。 但是在我关闭程序并打开数据库之后,没有进行任何更改 在运行过程中,我没有收到任何错误。 我使用的是VS2013 professional,SQL数据库,C#无法使用C#Win表单更新SQL数据库,c#,sql,sql-server,database,visual-studio-2013,C#,Sql,Sql Server,Database,Visual Studio 2013,我的申请(C#Win表格)在不久前运行良好,即(更新、插入、删除…)。 但是在我关闭程序并打开数据库之后,没有进行任何更改 在运行过程中,我没有收到任何错误。 我使用的是VS2013 professional,SQL数据库,C# 如果没有任何附加事务,例如TransactionScope或SqlTransaction(我们在您的代码中看不到),则没有理由回滚更新。我相信你可能没有更新你认为的数据 虽然不一定是解决方案,但使用参数化查询比使用字符串要好得多-这具有安全性(Sql注入)、性能(查询计
如果没有任何附加事务,例如
TransactionScope
或SqlTransaction
(我们在您的代码中看不到),则没有理由回滚更新。我相信你可能没有更新你认为的数据
虽然不一定是解决方案,但使用参数化查询比使用字符串要好得多-这具有安全性(Sql注入)、性能(查询计划缓存),并且有助于消除与引号、转义和类型转换相关的错误(这里可能是这种情况-例如,您正在使用引号将newSum
插入InStock
中,这可能意味着一个数值,这意味着字符类型)
其他小修改包括处理
SqlCommand
,还请注意,处理连接也会关闭它,因此您不需要显式关闭它(尽管这样做不会造成伤害)。试试这个:它可能对您有用
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();
另外,添加断点并检查代码是否正在执行
因为您的代码看起来很好,&应该可以工作提及/提供一些代码…以便我们能够理解和跟踪问题您没有提交事务,关闭应用程序导致回滚丢失更改?也许这就是问题所在。但最初它起作用了,我没有更改代码。使用(SqlConnection-connection=new-SqlConnection(consting)){SqlCommand-cmd=new-SqlCommand(“更新[FullInk]集[InStock]='“+newSum+”,其中[Catalog]='“+Catalog+'”);cmd.CommandType=CommandType.Text;cmd.Connection=Connection;Connection.Open();cmd.ExecuteNonQuery();Connection.Close();}这是我所做的更新命令的示例。
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();
}
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();