将 varchar 值“System.Web.UI.WebControls.TextBox”转换为数据类型 int 时转换失败。

Posted

技术标签:

【中文标题】将 varchar 值“System.Web.UI.WebControls.TextBox”转换为数据类型 int 时转换失败。【英文标题】:Conversion failed when converting the varchar value 'System.Web.UI.WebControls.TextBox' to data type int.' 【发布时间】:2021-09-17 04:52:11 【问题描述】:

这是我的代码,我不知道为什么我不断收到错误

protected void Button1_Click(object sender, EventArgs e)

    SqlConnection con = new SqlConnection("Data Source=DESKTOP-6MK4S6G;Initial Catalog=Domingo;Integrated Security=True");

    SqlCommand cmd = new SqlCommand(@"INSERT INTO [dbo].[Job]
                                          ([JobCardNo], [CustomerNo], [JobTypeID], [Days])
                                      VALUES ('" + TxtNo.ToString() + "', '" + Txtcust.ToString() + "', '" + TxtID.ToString() + "','" +Txtdays.ToString() + "')", con);

    con.Open();
    cmd.ExecuteNonQuery();

    Response.Write("Data created successfully");
    con.Close();

这是我在 SQL Server 中的表:

INSERT INTO [dbo].[Job] ([JobCardNo], [CustomerNo], [JobTypeID],[Days])
VALUES (<JobCardNo, int,>, <CustomerNo, int,>, <JobTypeID, int,>, <Days, int,>)

我不断收到此错误

运行代码时。

【问题讨论】:

此代码易受SQL Injection Attack 的攻击。使用参数化查询比使用连接更好 您不能只在文本框上调用 .ToString() 方法并期望从文本框中获取值。您需要通过 Text 属性访问该值。见the documentation。当然,永远不要像您正在做的那样连接字符串以形成 SQL 查询。相反,使用参数化查询来帮助防御 SQL 注入攻击。 请使用参数化查询 - 通过连接等方式构建 SQL 查询是灾难的根源。它不仅是许多难以调试的语法错误的来源,而且还是 SQL Injection attacks 的大门。 另外:欢迎来到 ***。我推荐taking the tour,以及阅读how to ask a good question 和what's on topic。 ToString 实际上是做什么的?它不会像你想的那样做——你需要更多地了解控件以及如何使用它们。从查看该类的属性开始——也许还有一个关于在应用程序中使用控件的教程。 【参考方案1】:

我重现了您的问题。正如 cmets 所说,TextBox 不使用 ToString 方法,而是使用 Text 属性。

我对你的代码做了如下改动,你可以参考下面的代码。

protected void Button1_Click(object sender, EventArgs e)
    
      SqlConnection con = new SqlConnection(@"constr");
      SqlCommand cmd = new SqlCommand(@"INSERT INTO [dbo].[Job]
                                          ([JobCardNo], [CustomerNo], [JobTypeID], [Days])
                                      VALUES ('" + int.Parse(TxtNo.Text) + "', '" + int.Parse(Txtcust.Text) + "', '" + int.Parse(TxtID.Text) + "','" + int.Parse(Txtdays.Text) + "')", con);
      con.Open();
      cmd.ExecuteNonQuery();
      Response.Write("Data created successfully");
      con.Close();
    

结果如图:

【讨论】:

非常感谢 嗨,@ taahir mia。这个解决方案能解决您的问题吗?如果解决了,您可以单击“✔”接受它作为答案。有助于社区成员解决类似问题。 涉及用户输入的查询应始终参数化 - 此技术受 sql 注入影响。

以上是关于将 varchar 值“System.Web.UI.WebControls.TextBox”转换为数据类型 int 时转换失败。的主要内容,如果未能解决你的问题,请参考以下文章

错误 BC30456:“文本”不是“System.Web.UI.Control”的成员

(System.Web.UI.HtmlControls.HtmlGenericControl) 与控件类型 (System.Web.UI.HtmlControls.HtmlIframe) 不兼容

System.Web.UI.ScriptManager'在未引用的程序集中定义。但它在集会中?

如何配置使用 System.Web.UI

System.Web.UI.WebControls.TextBox”不包含“text”的定义,并且找不到可接受类型为“System.Web.UI.Web

为啥 MailDefinition 类需要 System.Web.UI.Control?