如何执行SQL语句?

时间:2012-01-25 15:38:31

标签: asp.net sql

我是编程的新手,大部分都是自学的。希望有人能就这些代码给我建议。

基本上,我遇到的问题是我的SQL语句没有执行来从我的数据库中检索数据。它只是将userPermissionsOne分配给SELECT MemberOne FROM aspnet_Users WHERE 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 个答案:

答案 0 :(得分:6)

如何使用.NET执行SQL语句有很多选择。首先阅读以下内容。这些是我在决定如何访问数据库时通常会考虑的前三种技术:

来自Microsoft:

  

ADO.NET提供了.NET中最直接的数据访问方法   框架。对于允许应用程序的更高级别的抽象   反对概念模型而不是底层存储   模型,请参阅ADO.NET实体框架。

最近,我的数据库访问技术是Dapper。它速度快,重量轻,而且编码方便。

答案 1 :(得分:4)

假设您使用SqlServer作为数据库:

SqlCommand和SqlConnection类在这里对你有用,所以我想看看那些。

此外,存储过程是一种很好的方法,因为它们更安全,并且执行速度比将查询发送到服务器的速度稍快。快速谷歌了解存储过程的好处将帮助您

要注意的一件事是有不同的方法来执行您的查询。 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()

同样在您执行LI ' __ '的SQL中,您可能希望执行LIKE '%__%',因为%是通配符,您可以使用其中一个或两个,但只需执行{{1} }与LIKE '__'___1

等值不匹配