none
Проблема с типом uniqueidentifier. Неправильный синтаксис около конструкции RRS feed

  • Вопрос

  • Здравствуйте, уважаемые).

    При попытке  вывести данные относящиеся к пользователю из таблицы возникает ошибка:
    При соединении с БД произошла ошибка. Неправильный синтаксис около конструкции "f81a14".

    Текст запроса:

    Select * from news where (autor_id= 75f81a14-221a-4b67-9d7a-215d38438a08); 

    Вот так выглядит отрезок кода в приложении на C# 

    String strSqlConnection = WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;

            SqlConnection sqlCon = new SqlConnection(strSqlConnection);

            try

            {

                string rt="Select * from news where (autor_id= (" +Membership.GetUser().ProviderUserKey.ToString()+"));";            sqlCon.Open();

                Label1.Text = rt;

                SqlCommand cmd_SQL = new SqlCommand(rt, sqlCon);

                cmd_SQL.CommandType = CommandType.Text;

                cmd_SQL.ExecuteNonQuery();

            }

            catch (Exception ex)

            {

                Label1.Text += "При соединении с БД произошла ошибка ";

                Label1.Text += ex.Message;

            }

            finally

            {

                sqlCon.Close();

            }

    Помогите пожалуйста разобраться или подскажите иной способ.) 

    5 июня 2011 г. 13:47

Ответы

  • Вся проблема в попытке напрямую использовать string concatenation, когда как правильное использование параметров искючает возможность подобной ошибки.

    string rt="Select * from news where autor_id= @AuthorID;";    
    //Better to select only fields we need instead of SELECT *
       sqlCon.Open();
    
          Label1.Text = rt;
    
          SqlCommand cmd_SQL = new SqlCommand(rt, sqlCon);
     
          cmd_SQL.CommandType = CommandType.Text;
          cmd_SQL.Parameters.AddWithValue("@AuthorID",Membership.GetUser().ProviderUserKey);
          cmd_SQL.ExecuteNonQuery();
    


    For every expert, there is an equal and opposite expert. - Becker's Law


    My blog
    • Помечено в качестве ответа Dmitry Davydov 14 июня 2011 г. 14:50
    5 июня 2011 г. 20:28
  • а так:

    Select * from news where autor_id= '75f81a14-221a-4b67-9d7a-215d38438a08'; 
    
    
    

    http://www.t-sql.ru
    5 июня 2011 г. 15:16
    Отвечающий

Все ответы

  • а так:

    Select * from news where autor_id= '75f81a14-221a-4b67-9d7a-215d38438a08'; 
    
    
    

    http://www.t-sql.ru
    5 июня 2011 г. 15:16
    Отвечающий
  • да заработало) большое спасибо.
    5 июня 2011 г. 15:29
  • Вся проблема в попытке напрямую использовать string concatenation, когда как правильное использование параметров искючает возможность подобной ошибки.

    string rt="Select * from news where autor_id= @AuthorID;";    
    //Better to select only fields we need instead of SELECT *
       sqlCon.Open();
    
          Label1.Text = rt;
    
          SqlCommand cmd_SQL = new SqlCommand(rt, sqlCon);
     
          cmd_SQL.CommandType = CommandType.Text;
          cmd_SQL.Parameters.AddWithValue("@AuthorID",Membership.GetUser().ProviderUserKey);
          cmd_SQL.ExecuteNonQuery();
    


    For every expert, there is an equal and opposite expert. - Becker's Law


    My blog
    • Помечено в качестве ответа Dmitry Davydov 14 июня 2011 г. 14:50
    5 июня 2011 г. 20:28