我在尝试使用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中。
谢谢!
答案 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 = ...
我打赌使用这种方法,你的代码就可以了。