我有一个ASP.Net表单,它从文本框中获取值:
<asp:TextBox ID="txtID" runat="server" maxlength=9></asp:TextBox>
ID必须是9个数字。
抓住它之后,我想将它插入数据库(SQL Server 2005),所以我构建了一个参数化字符串,
'The Query
cmd.CommandText = "insert into table (aid) values ('@aid')"
cmd.Connection = conn
'Grab the value
cmd.Parameters.add("@aid", SqlDBType.Int).value = txtID.text
'Execute!
cmd.Connection.Open()
cmd.ExecuteNonQuery
然而,它不让我。它不断给出以下错误消息:
Conversion failed when converting the varchar value '@aid' to data type int.
所以我尝试过各种各样的事情:
cmd.Parameters.add("@aid", SqlDBType.Int).value = 999999999
cmd.Parameters.add("@aid", SqlDBType.Int).value = Convert.ToInt16(txtID.text)
cmd.Parameters.add("@aid", SqlDBType.Int).value = Convert.ToInt32(txtID.text)
cmd.Parameters.add("@aid", SqlDBType.Int).value = Convert.ToInt64(txtID.text)
没有任何作用。在数据库内部,类型为“int”。
有什么想法吗?
答案 0 :(得分:5)
删除查询中@aid
周围的引号,使其如下所示:
cmd.CommandText = "insert into table (aid) values (@aid)"
否则,您将发送代码混合消息。 参数从不用引号括起来。如果它们用引号括起来,它们就是字符串文字。此外,在纯SQL中,数字不包含在引号中,而是文本值(varchar
等)。因此,删除引号,参数应该没有问题被创建。
参数不会直接插入SQL批发。在 SQL Server解析了查询后,它们被放入中。因此,参数应该是独立的,因为如果它们不是,它们将被视为字符串文字。参数化将注意将参数转换为正确的数据类型。有关参数如何在幕后工作的详情,请参阅this post。
答案 1 :(得分:2)
您的SQL查询是问题所在。 你正在尝试
INSERT INTO TABLE(aid) VALUES('123456789')
您需要删除引号并执行
INSERT INTO TABLE(aid) VALUES(123456789)