2013-04-01 2 views
1

в код у меня есть это:asp.net получить текущий идентификатор пользователя

protected void ButtonSave_Click(object sender, EventArgs e) 
     { 
      Guid guid = (Guid)Membership.GetUser().ProviderUserKey; 
      string name = TextBoxCategoryName.Text; 
      // string user = Membership.GetUser().UserName; 
      this.connection.Open(); 
      command = connection.CreateCommand(); 
      command.CommandText = "insert into ProfitCategories(name, IdUser) values ('" + name + "', "+guid+")"; 
      command.ExecuteNonQuery(); 

      connection.Close(); 
     } 

, но это дает ошибку: Incorrect syntax near 'a8'. как получить GUID из текущего пользователя и вставить в базу данных

+0

Параметрируйте свой запрос для защиты от SQL-инъекций, и я уверен, ваша проблема будет решена. – MikeSmithDev

+0

как это сделать? – Krasimir

+1

Посмотрите здесь: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx Параметрирование ваших параметров защитит вас от SQL-инъекций и сделает ваше приложение (подробнее) безопасный. – nimeshjm

ответ

1

Небольшая проблема: Вам не хватает одиночных кавычек вокруг вашего GUID. Это должно быть:

command.CommandText = "insert into ProfitCategories (name, IdUser) values ('" + name + "', '" + guid + "')"; 

Но не делайте этого.

Большая проблема: У вас есть риск для SQL-инъекций, если вы это исправите. Используйте параметры для инструкции SQL для правильного исправления или использования хранимой процедуры.

Reading:

MSDN SqlCommand.Parameters

SQL Injection

3

Хотя Майк представил вам ответ, я хотел бы обратить ваше внимание на использование хранимой процедуры вместо SQL запросов

try 
    { 
     Guid guid = (Guid)Membership.GetUser().ProviderUserKey; 
     string name = TextBoxCategoryName.Text; 

     using (SqlConnection con = new SqlConnection(sqlConnection)) 
      { 
      SqlCommand command = new SqlCommand("sp_InsertUserDatails", sqlConnection); 
      command.CommandType = CommandType.StoredProcedure; 
      command.Parameters.Add("@name", SqlDbType.VarChar).Value = name ; 
      command.Parameters.Add("@IdUser", SqlDbType.VarChar).Value = guid ; 
      sqlConnection.Open(); 
      return command.ExecuteNonQuery(); 
      sqlConnection.Close(); 
      } 
    } 
catch (SqlException ex) 
    { 
    Console.WriteLine("SQL Error" + ex.Message.ToString()); 
    return 0; 
    } 

И вот идет Хранимая процедура

CREATE PROCEDURE sp_InsertUserDatails 
(
    @name varchar(100), 
    @IdUser varchar(100) 
) 
AS 
BEGIN 
    insert into dbo.ProfitCategories(name, IdUser) 
    values (@name, @IdUser) 
END 
GO 
+1

Я буду +1, что для показа кода примера (даже если вы не показывали, как писать SPROC;) – MikeSmithDev

+1

@Mike По вашему предложению: D. Теперь все еще осталось * Connection String * в web.Config;) – Zerotoinfinity

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