【问题标题】:ASP.NET 2.0: Cannot Convert VarChar to IntASP.NET 2.0:无法将 VarChar 转换为 Int
【发布时间】:2009-08-21 16:29:18
【问题描述】:

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

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    删除查询中@aid 周围的引号,使其看起来像这样:

    cmd.CommandText = "insert into table (aid) values (@aid)"
    

    否则,您将发送代码混合消息。 参数从不括在引号中。如果它们被括在引号中,它们就是字符串文字。此外,在纯 SQL 中,数字不包含在引号中,但文本值(varchar 等)是。所以,去掉引号,参数应该不会有问题。

    参数不会直接插入到 SQL 中。 SQL Server 解析了查询之后,它们被放入。因此,参数应该单独存在,因为如果不是,它们将被视为字符串文字。参数化将注意将参数转换为适合您的数据类型。请参阅this post,了解有关参数如何在幕后工作的更多信息。

    【讨论】:

    • 即使它是一个 varchar 参数,您从不将参数名称括在引号中。
    • 哇,看来你今天的上限了。好吧,也许他会接受你的回答。
    • 哈哈,我从早上 8 点开始就一直在努力让 10k 俱乐部接受它。我正在等待另一个投票来编辑关于参数的子句。我不想对下面的答案投反对票以保持这一点,因为它对所发生的事情的描述相当不准确。
    • 修正是正确的,但原因是查询试图插入字符串“@aid”而不是使用参数。在查询的字符串文字中,@aid 不被视为参数,而只是文本。
    • 大声笑,我应该更仔细地阅读乔尔的建议。我又花了 10 分钟,想知道为什么查询会截断值。永远不要将参数名称用引号括起来,否则它会将它们解释为字符串,而不是参数,从而为您的数据库留下诸如“@username”、“@address”等值......
    【解决方案2】:

    您的 sql 查询是问题所在。 你正在尝试做

    INSERT INTO TABLE(aid) VALUES('123456789')
    

    你需要去掉引号然后做

    INSERT INTO TABLE(aid) VALUES(123456789)
    

    【讨论】:

    • 不过,这并不是参数的应用方式。第一个实际上是有效的 SQL。见:stackoverflow.com/questions/1263125
    • 啊是的,duh 第一个可以工作,因为它可以将其转换为 int。我知道问题出在引号,但我认为问题出在错误的原因上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2013-11-27
    • 2017-12-11
    • 2013-07-21
    • 1970-01-01
    • 2019-01-17
    相关资源
    最近更新 更多