Как мне выполнить оператор SQL? - PullRequest
2 голосов
/ 25 января 2012

Я очень новичок в программировании, самоучка в большинстве своем. надеюсь, кто-нибудь может дать мне совет по кодам.

По сути, проблема, с которой я сталкиваюсь, заключается в том, что мой оператор SQL не выполняется для извлечения данных из моей базы данных. он просто назначает userPermissionsOne с помощью SELECT MemberOne ОТ aspnet_Users ГДЕ MemberOne LIKE ' _ '.

Любая помощь очень ценится.

userName = User.Identity.Name;  
userName = userName.ToUpper();  
selectedUserName = betDropDownList.SelectedValue;  
userPermissionsOne = "SELECT MemberOne FROM aspnet_Users WHERE MemberOne LIKE '___'";  
userPermissionsTwo = "SELECT MemberTwo FROM aspnet_Users WHERE MemberTwo LIKE '___'";  
userPermissionsThree = "SELECT MemberThree FROM aspnet_Users WHERE MemberThree LIKE '___'";  

if (string.Compare(userName, selectedUserName, true) == 0 || User.IsInRole("Administrator"))
{
    hinzufugenButton.Enabled = true;
    loschenButton.Enabled = true;
    bearbeitenButton.Enabled = true;
    betDropDownList.Enabled = true;
}
else if (userName == "ENL")
{
    if (string.Compare(userPermissionsOne, selectedUserName, true) == 0 ||
        string.Compare(userPermissionsTwo, selectedUserName, true) == 0 ||
        string.Compare(userPermissionsThree, selectedUserName, true) == 0)
    {
        hinzufugenButton.Enabled = true;
        loschenButton.Enabled = true;
        bearbeitenButton.Enabled = true;
    }
    else
    {
        hinzufugenButton.Enabled = false;
        loschenButton.Enabled = false;
        bearbeitenButton.Enabled = false;
        betDropDownList.Enabled = false;
    }
}

Ответы [ 2 ]

6 голосов
/ 25 января 2012

У вас есть много вариантов, как выполнить инструкцию SQL с .NET.Читайте на следующем для начала.Это первые три технологии, которые я обычно рассматриваю при принятии решения о том, как получить доступ к базе данных:

От Microsoft:

ADO.NET предоставляет наиболее прямой метод доступа к данным в .NET Framework.Для абстракции более высокого уровня, которая позволяет приложениям работать против концептуальной модели вместо базовой модели хранения, см. ADO.NET Entity Framework.

В последнее время моя технология перехода на доступ к базе данныхЧудной.Это быстрый, легкий и простой в использовании код.

4 голосов
/ 25 января 2012

Предполагается, что вы используете SqlServer в качестве базы данных:

Здесь вам пригодятся классы SqlCommand и SqlConnection, так что я бы посмотрел на них.

Также сохраняются следующие процедуры:отличный способ сделать это, так как они более безопасны и работают немного быстрее, чем отправка запроса на сервер.Краткий обзор преимуществ сохраненных процедур Google поможет вам здесь

Следует отметить, что существуют различные способы выполнения вашего запроса.Класс SqlCommand имеет довольно много методов, например, ExecuteNonQuery () просто запустит команду sql, которая не возвращает данные (например, вставку или удаление), тогда как ExecuteScalar выполнит запрос, который возвращает только одно значение.

Существуют и другие варианты, такие как создание DataTable, а затем использование DataAdapter для заполнения таблицы.

Я опубликую несколько примеров кода подключения к моей базе данных, извините, он в VB, но вы сможете легко конвертировать в C #достаточно.

Во-первых, это соединение с использованием адаптера данных

  Dim dt As New DataTable

  ' There are plenty of options you can use with the SqlConnection constructor so you can just modify this to suit your needs
  Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString())

  Dim cmd As New SqlCommand
  cmd.CommandType = CommandType.StoredProcedure
  cmd.CommandText = "spGetMenuItemsForTickets"
  ' parameters could be added here by doing
  ' cmd.parameters.addwithvalue("@ParamName",value)
  cmd.Connection = conn

  Using da As New SqlDataAdapter(cmd)
     conn.Open()
     da.Fill(dt)
     conn.Close()
  End Using

Это пример использования ExecuteScalar

Dim names As String = String.Empty

  Dim ds As New DataTable

  Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString())

  Dim cmd As New SqlCommand
  cmd.CommandType = CommandType.StoredProcedure
  cmd.CommandText = "spGetUserNamesForUpdate"
  cmd.Parameters.AddWithValue("@TicketID", TicketID)

  cmd.Connection = conn

  conn.Open()

  names = cmd.ExecuteScalar()

  conn.Close()

Это пример ExecuteNonQuery. Он в значительной степени идентичен Scalar, но без возвращаемого значения

     Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString())

     Dim cmd As New SqlCommand

     cmd.CommandType = CommandType.StoredProcedure
     cmd.CommandText = "spAddFileToTicket"

     cmd.Parameters.AddWithValue("@ticketID", TicketID)
     cmd.Parameters.AddWithValue("@filename", Filename)
     cmd.Parameters.AddWithValue("@filePath", Filepath)
     cmd.Parameters.AddWithValue("@comments", Comment)

     cmd.Connection = conn

     conn.Open()
     cmd.ExecuteNonQuery()
     conn.Close()

Также в вашем SQL, где вы делаете LIKE ' __ ', вы, вероятно, захотите сделатьLIKE '%__%', поскольку% являются символами подстановки, вы можете использовать один или оба из них, но простое выполнение LIKE '__' не будет соответствовать значению, например ___1 oR 1___ и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...