【发布时间】:2015-02-06 12:41:42
【问题描述】:
我试图将一些数据插入到 sql 服务器中,并且代码运行良好,直到我在最后添加了@instel。当我添加时出现错误“将数据类型 varchar 转换为数字时出错。”即使我将文本框留空。
我将它作为一个文本框,但由于我收到错误,我试图将它作为一个变量,但它仍然没有解决问题。该代码适用于要插入的 REL,这也是一个 int。 REL 和@instel 的数据库和文本框属性也相同。我也尝试将变量设置为 int,但它没有改变任何东西。如果有人知道这是为什么并且可以帮助我,将不胜感激。
SqlCommand slMEVO_NAW = new SqlCommand(@"insert into NAW(REL,NAAM,BTW_CODE,TAV,STR,PL,LAND,PLBOX,TAAL,COUNTRY_C,TEL,FAX,EMAIL,XMAS,TEL2,STR1,INSTELINCL,INCOTERMS,PRODDAT,INSTEL) values('" + this.Txtbx_RelNmmr.Text + "','" + this.Txtbx_Bedrijf.Text + "','" + this.Txtbx_BtwCode.Text + "','" + this.Txtbx_Tav.Text + "','" + this.Txtbx_HuisAdres.Text + "','" + this.Txtbx_PstCde.Text + "','" + this.Txtbx_Land.Text + "','" + this.Txtbx_PstBs.Text + "','" + this.Txtbx_Taal.Text + "','" + this.Txtbx_LndCode.Text + "','" + this.Txtbx_Telnmmr.Text + "','" + this.Txtbx_Fax.Text + "','" + this.Txtbx_Email.Text + "','" + this.Txtbx_Xmas.Text + "','" + this.Txtbx_telnmmr2.Text + "','" + this.Txtbx_BezAdres.Text + "','" + this.TBX_Instelkstn.Text + "','" + this.Txtbx_Incot.Text + "','" + this.TBX_PrdctDtm.Text + "','@INSTEL' );", Connectie.connMEVO_NAW);
slMEVO_NAW.Parameters.Add("@INSTEL", SqlDbType.VarChar).Value = Txtbx_InstelKsten.Text;
修复 似乎在我将其更改为所有参数之后,如果文本框为空,它只会给出错误,所以我只是让程序在立即执行查询之前将文本设置为 0
【问题讨论】:
-
SQL 注入警报。您需要首先修改 SQL 查询,使其使用所有参数,而不是串联字符串。
-
不要引用它;
+ ", @INSTEL);- 但更重要的是参数化所有其他值 -
我试图删除 @instel 周围的 ' 但它仍然没有工作,我知道将其余部分更改为变量,但在我这样做之前我仍然试图让它工作。
-
@maam27 使用那种“风格”只会让事情变得更难。任何一个文本框中的单引号都会搞砸查询。使用参数不仅更安全,而且更容易。
-
我正在努力改变那个 atm