2015-06-26 2 views
0

я получил ошибку:Почему я должен объявлять переменную?

Must declare scalar variable '@20'

... при загрузке веб-страницы для извлечения данных запроса.

Я сделал несколько веб-запросов, но я не понимаю, почему переменная должна быть объявлена ​​.

Это началось, когда я выписал код и загрузил страницу, он работал нормально. Сделал несколько изменений в несвязанных частях страницы, снова обновился и начал получать сообщение об ошибке. Мне никогда не приходилось иметь дело с объявить раньше.

var db = Database.Open("StarterSite"); 
var selectQueryString = "SELECT * FROM business_Customer WHERE [email protected]"; 

var memberid = Database.Open("StarterSite").QueryValue("SELECT memberid FROM business_Customer WHERE [email protected]",WebSecurity.CurrentUserName); 

Это сценарий в верхней части моей страницы, прямо перед загрузкой html.

foreach (var row in db.Query(selectQueryString, memberid)) {...} 

... это сценарий, который дает мне ошибку.

Но перед изменением и добавлением страницы переменная memberid работала просто отлично. Значение представляет собой целое число, и я использовал его отдельно, чтобы подтвердить, что он работает. Я попытался изменить фрагмент кода на foreach (var row in db.Query(selectQueryString, (int) memberid)) {...} и он дал мне ошибку, что сказал:

Cannot convert null to 'int' because it is a non-nullable value type

Я очень смущен ... Что объявляя должен делать с вызовом значение из базы данных SQL Server? Есть ли простое решение моей проблемы? Я читал другие сообщения stackoverflow, связанные с этим, но решения были написаны в синтаксисе SQL и использовали «Declare», у меня не хватило ресурсов, чтобы понять, как применить их решение к моей проблеме.


Я обнаружил, что было не так с моим сценарием. В нем отсутствовал внешний файл javascript, необходимый для другого набора значений, который каким-то образом имел какое-то отношение к ошибке. Но ... мой оригинал для моего первоначального вопроса, объявляет переменную что-то i нужно знать? Я не возражаю против его изучения (если есть ресурсы, которые вникают в детали того, для чего это необходимо, или когда они используются), но мне никогда не приходилось иметь дело с этим раньше ... это что-то «важное/ценное»?

+1

Поскольку переменная * SQL * должна иметь значение, если оно используется в запросе .. в этом случае это вызвано тем, что параметр с именем '@ 20' не был связан. Возможно, это должно было быть 'memberid = @ 0' (что означает первый параметр, из переменной C# 'memberid', bound)? (Обратите внимание, как в другом запросе используется '@ 0', а не' @ 20': шаблоны имеют значение.) – user2864740

+0

Первоначально я установил его для 0, но ошибка появилась «@ 0», после поиска в Интернете я понял, что переменная может быть чем угодно. Поэтому я дал ему случайное число, чтобы узнать, может ли он указать, откуда исходит ошибка. Единственное, что я понимаю, это 'selectQueryString' - причина моей ошибки. – user3681384

ответ

0

Вы должны использовать @0 - это первый аргумент.

Query и QueryValue оба имеют два параметра - commandText и массив параметров. Для того, чтобы определить, где параметры идут в вашем CommandText, вы используете @0, @1 и т.д.

Например:

var selectQueryString = "SELECT * FROM business_Customer WHERE [email protected]"; 
db.Query(selectQueryString, memberid) 

Так что, когда вы звоните Query, он заменит @0 со значением переменной memberid.

+0

«@ 0» и «@ 1» были первым, что я пробовал, и именно поэтому я начал играть с '@ 20', потому что я не был уверен, какая переменная была проблемой. Я знаю, что ошибка исходит от 'selectQueryString', но ... я не уверен, почему. Я подумал, что, возможно, я должен переписать «Query», чтобы не включать второй запрос db, но один из них является значением, а другой - строкой ... есть ли у вас какие-либо другие идеи? – user3681384

+1

Я подозреваю, что вы видите вторую ошибку, потому что memberid равно null. – Donal

+0

вот что я и думал. Но я загрузил переменную 'memberid' на отдельной странице без каких-либо фрагментов кода, это дало мне значение, которое я хотел. Он работал в первый раз, прежде чем я начал добавлять больше кодов на страницу. Но с ошибкой, не имеющей никакого смысла, я не уверен, что, где/где я ошибся ... – user3681384

Смежные вопросы