Если это действительно этот код, который выдает ошибку, я предполагаю, что, поскольку все ваши экранирование и цитирование перегружены, вы получите запрос вроде
INSERT INTO [camss].[dbo].[tb_ds0402req] ( [ds0402_key] ,[lname] )
VALUES (whatever your key is unquoted!, System.Web.UI.HtmlControls.HtmlInputText)
(при условии, что VisitorLName
является элементом управления HtmlInputText
). Вы не добавляете строку "@VisitorLName"
, потому что она не в кавычках - вы вставляете возвращаемое значение из VisitorLName.ToString()
... которое, насколько мне известно, возвращает полное имя типа элемента управления.
(Вы не получаете сообщение об ошибке, когда пишете @VisitorLName
без кавычек, потому что @
— это способ C# избежать идентификаторов, чтобы вы могли использовать ключевые слова в качестве имен переменных и т. д. Что касается C#, вы только что сказали ...+ VisitorLName +
... .)
Также обратите внимание, что при построении строки SQL вы не используете преимущества параметров, которые являются основной функцией, предотвращающей SQL-инъекции, и упрощающей создание SQL для загрузки! Если вы собираетесь использовать параметры, используйте их для каждого значения, которое не должно быть именем таблицы или чем-то еще. (Для имен таблиц/баз данных/схем/и т. д. вы сами. Вы не можете использовать параметры для их замены. Прочтите: вы снова уязвимы для SQL-инъекций. Так что не делайте этого, если у вас нет к!)
Чтобы решить проблему, измените свой код так, чтобы он читался примерно так:
sSql = "INSERT INTO [camss].[dbo].[tb_ds0402req] ( [ds0402_key] ,[lname] ) " +
"VALUES (@DS0402Key, @VisitorLName)";
try
{
using (SqlCommand cmd = new SqlCommand(sSql, conn))
{
cmd.Parameters.AddWithValue("@DS0402Key", Session["DS0402Key"]);
cmd.Parameters.AddWithValue("@VisitorLName", VisitorLName.Value);
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
//error handling code
}
Кроме того, найдите, где вы вставляете ключ в сеанс... и убедитесь, что вы не вставляете весь элемент управления (а не только его значение).
person
cHao
schedule
22.03.2012
sSql
кажется уязвимым для SQL Injection. Думали ли вы, что одним из ваших пользователей может быть Bobby Tables? - person Adam Mihalcin   schedule 22.03.2012VALUES(@DS0402Key, @VisitorLName)
и добавили к команде параметр@DS0402Key
так же, как@VisitorLName
. - person cHao   schedule 22.03.2012