2013-02-22 5 views
2

Я сохраняю значение в переменной в javascript. Чем я создал скрытый тег, чтобы получить доступ к переменной из кода и сохранить ее в базе данных. НО почему-то на линии cmd.ExecuteNonQuery(); она givig мне следующее сообщение об ошибке при попытке ввода данных в базе данных:Входные данные в базе данных из C#

ERROR: 42601: syntax error at end of input 

Ниже входной тег осины:

<div> 
     <input id="hidden_value" type="hidden" runat="server"/> 
     <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 

    </div> 

Ниже показано, как Я звоню скрытый вход в JavaScript и установить его значение:

var store_altitude; 
store_altitude = some_value; 
document.getElementById("hidden_value").value=store_altitude; 

и следующее это отделенного кода:

using (NpgsqlConnection conn = new NpgsqlConnection(connstring)) 
      { 
       try 
       { 
        conn.Open(); 
        Response.Write(hidden_value.Value); 
        NpgsqlCommand cmd = new NpgsqlCommand("insert into altitude select nextval('altitude_id_seq'),"+hidden_value.Value, conn); 
        cmd.ExecuteNonQuery(); 


        conn.Close(); 
       } 
       catch (Exception) 
       { 
        ClientScript.RegisterStartupScript(this.GetType(), "", "$(document).ready(function(){alert('problem with connection')});", true); 
       } 
      } 
+0

Почему вы не используете параметры? –

+0

Хорошая точка @ ta.speot.is НО вы думаете, что это повлияет на ошибку, которую я получаю? –

+1

Ну да, если 'hidden_value' предназначен для интерпретации как строки или чего-то еще. –

ответ

0

вы можете удалить runat = "server" из скрытого_валюта и в полевой запрос пользователя ["hidden_value"]; для получения значения hidden_value.

+0

Я получаю следующую ошибку в коде; rquest не существует в текущем контексте. @Bhargav Mistri –

+0

использовать этот запрос ["hidden_value"]. Trim(); –

1

Вы должны NEVER, EVER сборки SQL путем конкатенации с параметрами. Он медленный, подверженный ошибкам, и вы открыли себе SQL-инъекцию. В вашем случае это выглядит как любой хакер сети может тривиально получить полный доступ к вашей базе данных.

Поскольку вы пишете raw sql и не используете ORM, вам, к сожалению, противостоит тот факт, что API ADO.NET довольно ужасен. Я настоятельно рекомендую использовать что-то вроде dapper, который позволил бы выразить свой запрос примерно следующим образом:

conn.Execute(@" 
    insert into altitude 
    values (extval('altitude_id_seq'), @hiddenVal)", 
     new { hiddenVal = hidden_value.Value}); 

Есть и другие легкие ADO.NET обертки; многие просто прекрасны, dapper просто бывает хорошо известно.

В качестве незначительной проблемы, хотя это и не требуется строго, я считаю, что более читаемым является включение имен столбцов, которые вы вставляете, а не неявно, используя их в любом порядке, в котором они перечислены. Но если вы абсолютно уверены, что схема не изменится, проблем нет.

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