CRUD 中修改后的钱正在上升 C#
modified money in CRUD is rising C#
我在 ado.net 中有一个 Window 应用程序,其中添加、修改和删除行数 table 秒。我的问题是修改一个table为money类型后,操作后money值变大了
String sql = "UPDATE kierowca SET imie='" + txtImie.Text + "',nazwisko='" + txtNazwisko.Text + "',data_zatrudnienia='" + txtData.Text + "',pensja='" + Convert.ToDecimal(txtPensja.Text) + "' WHERE imie='" + listBox2.SelectedItem.ToString() + "' AND nazwisko='" + listBox3.SelectedItem.ToString() + "';";
conn.Open();
cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
cmd.Clone();
conn.Close();
pensja 在我的 table 中是一种货币。我哪里错了?
我会给你一个使用你的数据的参数化查询的例子
String sql = @"UPDATE kierowca SET imie=@imie,nazwisko=@nazwisko,
data_zatrudnienia=@data_zatrudnienia,pensja=@pensja
WHERE imie=@search1 AND nazwisko=@search2";
using(SqlConnection con = new SqlConnection(......))
using(SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add("@imie", SqlDbType.NVarChar).Value = txtImie.Text;
cmd.Parameters.Add("@nazwisko", SqlDbType.NVarChar).Value = txtNazwisko.Text;
cmd.Parameters.Add("@data_zatrudnienia", SqlDbType.NVarChar).Value = txtData.Text;
cmd.Parameters.Add("@pensja", SqlDbType.Decimal).Value = Convert.ToDecimal(txtPensja.Text);
cmd.Parameters.Add("@search1", SqlDbType.Decimal).Value = listBox2.SelectedItem.ToString();
cmd.Parameters.Add("@search2", SqlDbType.Decimal).Value = listBox3.SelectedItem.ToString();
con.Open();
int rowsChanged = cmd.ExecuteNonQuery();
MessageBox.Show("Updated " + rowsChanged + " rows");
}
请注意,我在这里假设了两件事。
Convert.ToDecimal 不会失败(最好使用 decimal.TryParse 来测试输入是否确实是十进制值)。
您查询中涉及的其他字段都是文本类型(数据库上的 nvarchar)
为什么这应该有效?因为在这段代码中,一个 decimal 类型的参数,其值为 decimal 值的参数被传递给了数据库引擎。所以引擎不需要将字符串转换回十进制。如果数据库转换代码未正确解释区域设置小数点(逗号),则此转换很容易失败或给出不正确的结果
当然,如果您的字段类型不同,您应该更改所有受影响参数中的 SqlDbType 值
我在 ado.net 中有一个 Window 应用程序,其中添加、修改和删除行数 table 秒。我的问题是修改一个table为money类型后,操作后money值变大了
String sql = "UPDATE kierowca SET imie='" + txtImie.Text + "',nazwisko='" + txtNazwisko.Text + "',data_zatrudnienia='" + txtData.Text + "',pensja='" + Convert.ToDecimal(txtPensja.Text) + "' WHERE imie='" + listBox2.SelectedItem.ToString() + "' AND nazwisko='" + listBox3.SelectedItem.ToString() + "';";
conn.Open();
cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
cmd.Clone();
conn.Close();
pensja 在我的 table 中是一种货币。我哪里错了?
我会给你一个使用你的数据的参数化查询的例子
String sql = @"UPDATE kierowca SET imie=@imie,nazwisko=@nazwisko,
data_zatrudnienia=@data_zatrudnienia,pensja=@pensja
WHERE imie=@search1 AND nazwisko=@search2";
using(SqlConnection con = new SqlConnection(......))
using(SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add("@imie", SqlDbType.NVarChar).Value = txtImie.Text;
cmd.Parameters.Add("@nazwisko", SqlDbType.NVarChar).Value = txtNazwisko.Text;
cmd.Parameters.Add("@data_zatrudnienia", SqlDbType.NVarChar).Value = txtData.Text;
cmd.Parameters.Add("@pensja", SqlDbType.Decimal).Value = Convert.ToDecimal(txtPensja.Text);
cmd.Parameters.Add("@search1", SqlDbType.Decimal).Value = listBox2.SelectedItem.ToString();
cmd.Parameters.Add("@search2", SqlDbType.Decimal).Value = listBox3.SelectedItem.ToString();
con.Open();
int rowsChanged = cmd.ExecuteNonQuery();
MessageBox.Show("Updated " + rowsChanged + " rows");
}
请注意,我在这里假设了两件事。
Convert.ToDecimal 不会失败(最好使用 decimal.TryParse 来测试输入是否确实是十进制值)。
您查询中涉及的其他字段都是文本类型(数据库上的 nvarchar)
为什么这应该有效?因为在这段代码中,一个 decimal 类型的参数,其值为 decimal 值的参数被传递给了数据库引擎。所以引擎不需要将字符串转换回十进制。如果数据库转换代码未正确解释区域设置小数点(逗号),则此转换很容易失败或给出不正确的结果
当然,如果您的字段类型不同,您应该更改所有受影响参数中的 SqlDbType 值