【发布时间】:2020-03-09 04:06:49
【问题描述】:
我有一个问题,我正在尝试在数据表中记录的值(类型浮点)之间进行操作,问题是当我尝试在维护后使用组合框更新数据中的值(文本框中的操作结果)时操作,它显示错误(System.Data.SqlClient.SqlException:'错误将数据类型 varchar 转换为浮点数。'),那么我该如何解决这个问题!请帮助
这是我的代码的一部分,其中存在错误
private void comboBox5_SelectedIndexChanged(object sender, EventArgs e)
{
con.Open();
String query = "UPDATE Table_com SET Contents='" + textBox6.Text + "' WHERE Variable='" + comboBox5.Text + "'";
SqlDataAdapter SDA = new SqlDataAdapter(query, con);
SDA.SelectCommand.ExecuteNonQuery();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from Table_com where Variable='" + comboBox5.SelectedItem.ToString() + "'";
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
con.Close();
MessageBox.Show("Variable mise à jour avec succés");
}
【问题讨论】:
-
发布似乎产生错误的值。
-
您能否提供您要更新的表的定义(即创建语句)?顺便说一句:使用 CommandParameter 而不是将 UI 中的值直接放入查询字符串中。这可能会导致严重的安全问题(SQL 注入)
-
如果您尝试更新的 SQL 字段是浮点数,那么您不能使用 Field='1',因为它是一个 varchar,您必须改用 Field=1(没有撇号)。也永远不要直接将变量放入 SQL 语句中,而是使用prepared statements,否则你很容易受到 SQL 注入的攻击。
-
不要通过连接字符串来创建查询。想象一下如果有人在文本框中输入
' where 1=0; drop table Table_sagemcom;--会发生什么。使用参数化查询传递强类型变量 -
您的代码执行 SELECT 查询两次,但从不对结果做任何事情。首先是
ExecuteNonQuery,它不返回任何结果,然后是da.Fill,它加载一个数据表,但从不将其用于任何事情。你真的需要那个查询或数据表吗?
标签: c# sql .net datatable casting