尝试更新数据库 - 没有错误但也没有更新
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);
但是你真的定义参数name和datatype(这是一个好东西!)然后你使用 .Value = ...
来处理值分配。
这些代码行实际上应该是:
cmd.Parameters.Add("@ID", SqlDbType.SmallInt).Value = Int16.TryParse("@ID", out ID);
我打赌使用这种方法,您的代码会工作得很好。
我在尝试使用 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);
但是你真的定义参数name和datatype(这是一个好东西!)然后你使用 .Value = ...
来处理值分配。
这些代码行实际上应该是:
cmd.Parameters.Add("@ID", SqlDbType.SmallInt).Value = Int16.TryParse("@ID", out ID);
我打赌使用这种方法,您的代码会工作得很好。