我正在尝试创建一种更新方法。代码很好,但是当我运行项目时它给我一个错误:
转换为数字类型的数字时的转换。 (错误将数据类型varchar转换为数字)
我的代码是:
public ActionResult Edit(string numQuittance)
{
var connetionString = ConfigurationManager.ConnectionStrings["connections"].ToString();
QUITTANCIER quittancier = new QUITTANCIER();
using (SqlConnection connection = new SqlConnection(connetionString))
{
string sql = $"Select numero_quittance,numero_police,date_mvt_du,date_mvt_au,prime_gbase,prime_gannexe,frais,taxes,commission_paye From quittancier Where numero_quittance ='{numQuittance}'";
SqlCommand command = new SqlCommand(sql, connection);
connection.Open(); using (SqlDataReader dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
quittancier.NUMERO_QUITTANCE = Convert.ToString(dataReader["NUMERO_QUITTANCE"]);
quittancier.NUMERO_POLICE = Convert.ToString(dataReader["NUMERO_POLICE"]);
quittancier.DATE_MVT_DU = Convert.ToDateTime(dataReader["DATE_MVT_DU"]);
quittancier.DATE_MVT_AU = Convert.ToDateTime(dataReader["DATE_MVT_AU"]);
quittancier.PRIME_GBASE = Convert.ToInt32(dataReader["PRIME_GBASE"]);
quittancier.PRIME_GANNEXE = Convert.ToInt32(dataReader["PRIME_GANNEXE"]);
quittancier.FRAIS = Convert.ToInt32(dataReader["FRAIS"]);
quittancier.TAXES = Convert.ToInt32(dataReader["TAXES"]);
quittancier.COMMISSION_PAYE = Convert.ToInt32(dataReader["COMMISSION_PAYE"]);
}
}
connection.Close();
}
return View(quittancier);
}
[HttpPost]
[ActionName("Edit")]
public ActionResult Edit(QUITTANCIER quittancier)
{
var connetionString = ConfigurationManager.ConnectionStrings["connections"].ToString();
using (SqlConnection connection = new SqlConnection(connetionString))
{
string sql = "Update quittancier set numero_quittance='" + quittancier.NUMERO_QUITTANCE + "',numero_police='" + quittancier.NUMERO_POLICE + "',date_mvt_du='" + quittancier.DATE_MVT_DU + "',date_mvt_au='" + quittancier.DATE_MVT_AU + "',prime_gbase='" + quittancier.PRIME_GBASE + "',prime_gannexe='" + quittancier.PRIME_GANNEXE + "',frais='" + quittancier.FRAIS + "',commission_paye='" + quittancier.COMMISSION_PAYE + "'";
using (SqlCommand command = new SqlCommand(sql, connection))
{
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
return RedirectToAction("detail");
}
}
错误消息告诉您,数值不能转换为varchar。由于您没有执行任何显式转换,因此问题在于隐式转换。数据库尝试存储数字字段,但是您将文本值传递给它。注意,
'123'
是文本,而]
123
是数字。如果尝试存储数字值,则不需要在其两边加上引号,并且需要检查它是否确实是数字。
P.S。提防SQL注入,您的项目很容易被恶意的人入侵。