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

时间:2015-01-03 08:40:18

标签: c# sql-server datagridview

我在尝试使用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社区和SQL Server 2012.数据库中的信息显示在DataGridView中。

谢谢!

2 个答案:

答案 0 :(得分:2)

您使用此行设置@ID参数

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

您希望将字符串@ID转换为整数的结果是什么? Int16.TryParse返回一个布尔值,如果转换成功则返回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字段没有变化,并且在最坏的情况下更改不同的记录之一。

答案 1 :(得分:2)

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

你有

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

但你真的定义参数名称数据类型(这是一件好事!)然后你使用{{ 1}}来处理值赋值。

这些代码行应该是:

.Value = ...

我打赌使用这种方法,你的代码就可以了。