ASP.NET 2.0:无法将VarChar转换为Int

时间:2009-08-21 16:29:19

标签: vb.net sql-server-2005 asp.net-2.0

我有一个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”。

有什么想法吗?

2 个答案:

答案 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)