尝试更新数据库 - 没有错误但也没有更新

Trying to update db - no errors but no update either

我在尝试使用 SQL 更新命令和 DataGridView 更新数据库时遇到问题。

Int16 ID,  An;

// update db using sql command, the  code does not update the database
SqlCommand cmd = new SqlCommand("update filme set ID = @ID, Nume = @Nume, Gen = @Gen, Descriere = @Descriere, Actori = @Actori, An = @An, Rating = @Rating, Pret = @Pret where ID = @ID");

cmd.CommandType = CommandType.Text;
cmd.Connection = connection;

cmd.Parameters.AddWithValue("@ID", SqlDbType.SmallInt).Value = Int16.TryParse("@ID", out ID);
cmd.Parameters.AddWithValue("@Nume", SqlDbType.NVarChar).Value = "@Nume";
cmd.Parameters.AddWithValue("@Gen",SqlDbType.NVarChar).Value = "@Gen";
cmd.Parameters.AddWithValue("@Descriere", SqlDbType.NVarChar).Value = "@Descriere";
cmd.Parameters.AddWithValue("@Actori", SqlDbType.NVarChar).Value = "@Actori";
cmd.Parameters.AddWithValue("@An", SqlDbType.SmallInt).Value = Int16.TryParse("@An", out An) ;
cmd.Parameters.AddWithValue("@Rating", SqlDbType.NVarChar).Value = "@Rating";
cmd.Parameters.AddWithValue("@Pret",SqlDbType.Money).Value = "@Pret";

connection.Open();
cmd.ExecuteNonQuery();

此代码不会产生任何错误,但不会更新数据库。出了点问题,但我不知道是什么。

我使用 Visual Studio Community 和 SQL Server 2012。数据库中的信息显示在 DataGridView 中。

谢谢!

你用这一行设置了@ID参数

Int16.TryParse("@ID", out ID);

您希望将字符串 @ID 转换为整数的结果是什么?
并且 Int16.TryParse returns 一个布尔值,如果转换成功则为 true,否则为 false。

然后你用

cmd.Parameters.AddWithValue("@ID", SqlDbType.SmallInt).Value = .....

AddWithValue 的第二个参数是要赋予参数的值,而不是类型。
其余部分遵循相同的模式,因此此代码永远不会起作用。

举个例子,你应该这样写:

SqlCommand cmd = new SqlCommand(@"update filme set Nume = @Nume, Gen = @Gen, 
                                  Descriere = @Descriere, Actori = @Actori, 
                                  An = @An, Rating = @Rating, Pret = @Pret 
                                  where ID = @ID", connection);

cmd.Parameters.Add(new SqlParameter 
                   { ParameterName = @Nume,
                     SqlDbType = SqlDbType.Int,
                     Value = Convert.ToInt32(someTextBox.Text)   // Or some datagridview cell...
                   };

...and so on for the other parameters...

另请注意,我删除了关于 SET ID = @ID 的部分,因为这没有意义。如果您使用 ID 字段作为您的搜索条件,然后使用您正在搜索的值更新它,在最好的情况下,ID 字段不会发生变化,而在最坏的情况下,将导致更改与预期不同的记录一.

你使用.AddWithValue的方式全错了.....

你有

cmd.Parameters.AddWithValue("@ID", SqlDbType.SmallInt).Value = Int16.TryParse("@ID", out ID);

但是你真的定义参数namedatatype(这是一个好东西!)然后你使用 .Value = ... 来处理值分配。

这些代码行实际上应该是:

cmd.Parameters.Add("@ID", SqlDbType.SmallInt).Value = Int16.TryParse("@ID", out ID);

我打赌使用这种方法,您的代码会工作得很好。