ASP.NET 2.0: невозможно преобразовать VarChar в Int - PullRequest
1 голос
/ 21 августа 2009

У меня есть форма 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 ]

5 голосов
/ 21 августа 2009

Удалите кавычки вокруг @aid в вашем запросе, чтобы он выглядел так:

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

В противном случае вы отправляете код смешанных сообщений. Параметры никогда заключены в кавычки. Они являются строковыми литералами, если они заключены в кавычки. Кроме того, в чистом SQL числа заключаются не в кавычки, а в текстовые значения (varchar и т. П.). Таким образом, удалите кавычки, и у параметра не должно быть проблем с созданием.

Параметры не вставляются напрямую в SQL оптом. Они появляются в после того, как SQL Server проанализировал запрос. Следовательно, параметры должны быть сами по себе, поскольку они принимаются как строковые литералы, если это не так. Параметризация позаботится о преобразовании параметра в правильный тип данных для вас. См. этот пост для получения дополнительной информации о том, как параметры работают за кулисами.

2 голосов
/ 21 августа 2009

Ваш SQL-запрос является проблемой. Вы пытаетесь сделать

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

Вам нужно сбросить кавычки и сделать

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