知识大全 在ASP.NET中使用SQL的IN操作

Posted

篇首语:你可以忘掉失败,但不能忘掉教训;你可以忘掉昨天,但不能忘记历史。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在ASP.NET中使用SQL的IN操作相关的知识,希望对你有一定的参考价值。

在ASP.NET中使用SQL的IN操作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  这篇文章将建立一列包含CheckBox控件的DataGrid 这个控件允许用户对明细浏览进行多列选择 如果没有恢复对于动态SQL获得该功能的一种方法 那么必须使用IN操作     在文章的结尾 我们写了一个SQL Server用户自定义函数(UDF) 为了将一个字符串分解成带分隔符的子字符串 在这篇文章中 我们能看到这样一个UDF如何派得上用场 我们将建立一个web表单 在此用户可以通过选择checkbox控件而选择一些在DataGrid中的记录 对这些被检查的记录的明细将会出现在表单中的另一个DataGrid中 这个表单像来如图所示     在下面显示了我们用来建立表单的ASPX 注意 如何使用TemplateColumn和Checkbox控件增加DataGrid列 我们也使用DataGrid的DataKeyField属性来告诉对象 在数据库记录的哪一个字段将会包含第一行的关键字标示符     <form id= Form method= post runat= server >  <asp:DataGrid id= DataGrid runat= server   AutoGenerateColumns= False DataKeyField= EmployeeID >  <Columns>  <asp:TemplateColumn>  <ItemTemplate>  <asp:CheckBox runat= server ID= EmployeeCheckBox />  </ItemTemplate>  </asp:TemplateColumn>  <asp:TemplateColumn>  <ItemTemplate>  <%# DataBinder Eval(Container DataItem LastName ) %>   <%# DataBinder Eval(Container DataItem FirstName ) %>  </ItemTemplate>  </asp:TemplateColumn>  </Columns>  </asp:DataGrid>    <hr>    <asp:Button id= Orders runat= server Text= View Orders ></asp:Button>  <hr>  <asp:DataGrid ID= DataGrid Runat= server AutoGenerateColumns= True />  </form>    当表单加载初始化时 需要组装顶端的DataGrid 代码使用Enterprise Library来存取SQL Sever Northwind例子数据库并且执行 SELECT EmployeeID FirstName LastName FROM Employees 这一语句 加载事件的代码如下     private void Page_Load(object sender System EventArgs e)    if(!Page IsPostBack)    Database db = DatabaseFactory CreateDatabase();  DBCommandWrapper dbCommandWrapper;    using(dbCommandWrapper = db GetSqlStringCommandWrapper(SELECT_EMPLOYEES))    using (IDataReader dataReader = db ExecuteReader(dbCommandWrapper))    DataGrid DataSource = dataReader;  DataGrid DataBind();            当用户单击 Orders 按钮时 我们想显示与数据库中的那些与Employees相配并与Orders数据相关的第二个数据表格 这样做的一种方法是建立动态的SQL并且使用所有EmployeeIDs所需的WHERE语句的OR条件     第二个方法是使用WHERE语句的IN操作 IN操作将会一列表达式进行比较 例如 下列语句返回employee中IDS 和 之间的信息     SELECT EmployeeID FirstName LastName FROM Employees WHERE EmployeeID IN ( )    在观念上说 我愿意使用一个单一字符串参数来查询所传递的IDs 然而 也许作为一个单字符串 不能对IN操作使用一个单一字符串参数 如果那样 SQL语句会这样 WHERE Employee IN ( ) 并且数据库因为EmployeeID属于类型int—不属于varchar类型而返回一个错误消息     不过 我们使用文章中构造的split函数将字符串分离成不同的值 向split函数传递字符串 并且我们会得到与值 和 相对应的两条记录 选择employees并且计算它们的定单总数的SQL查询 将会如下     SELECT count(*) AS Orders E FirstName E LastName    FROM Orders O    INNER JOIN Employees E ON O EmployeeID = E EmployeeID    WHERE E EmployeeID IN(SELECT Value FROM fn_Split(@employeeIDs ))    GROUP BY FirstName LastName    ORDER BY count(*) DESC    使用以上查询所需要的是必须建立和传递@employeeIDs参数 这个参数将是用逗号隔开的IDs列表 为了建立该字符串 为了弄明白行是否被用户选择 我们需要使用一个循环 这一循环以行数循环次数 并且检查每一个checkbox控件 如果用户选择了行 通过从表的DataKeys属性中(它被建立在ASPX文件中来指向EmployeeID字段)提取检验人 将关键字保存在employee中     private string GetCheckedEmployeeIDs()    String delimiter = String Empty;  StringBuilder employeeIDs = new StringBuilder();  for(int i = ; i < DataGrid Items Count; i++)    CheckBox checkbox;  checkbox = DataGrid Items[i] FindControl( EmployeeCheckBox ) as CheckBox;  if(checkbox != null && checkbox Checked == true)    employeeIDs Append(delimiter + DataGrid DataKeys[i] ToString()) ;  delimiter = ;        return employeeIDs ToString();      以上方法返回一个字符串 像 对Orders按钮单击事件处理器将涉及这样一个方法 将信息传递至SQL以得到employees和orders的列表 并且将其结果绑定在第二个DataGrid对象中     private void Orders_Click(object sender System EventArgs e)    string employeeIDs = GetCheckedEmployeeIDs();  Database db = DatabaseFactory CreateDatabase();  DBCommandWrapper dbCommandWrapper;    using(dbCommandWrapper = db GetSqlStringCommandWrapper(SELECT_ORDERS))    dbCommandWrapper AddInParameter( @employeeIDs DbType String employeeIDs);  using (IDataReader dataReader = db ExecuteReader(dbCommandWrapper))    DataGrid DataSource = dataReader;  DataGrid DataBind();       cha138/Article/program/ASP/201311/21852

相关参考

知识大全 ASP.NET中显示Linq To SQL输出的SQL语句

ASP.NET中显示LinqToSQL输出的SQL语句  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 ASP.NET中如何防范SQL注入式攻击

ASP.NET中如何防范SQL注入式攻击  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一什么是

知识大全 ASP.NET中备份SQL Server数据库的方法

ASP.NET中备份SQLServer数据库的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 如何优化in操作

今天开发人员让我优化一个sql

知识大全 asp.net管理mysql数据库的小工具.

   在中可以通过MySQLDatadll来操作mysql数据库写法跟操作SQL数据库类似下面是相关的例子   一打开mysql数据库&nb

知识大全 ASP.NET 实现SQL注入过滤

ASP.NET实现SQL注入过滤  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一什么是SQL注入式

知识大全 ASP.NET调用.sql文件

ASP.NET调用.sql文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  笔者好久没有写随笔

知识大全 ASP.NET恢复备份Sql server

ASP.NET恢复备份Sqlserver  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近做的

知识大全 ASP.NET程序防范SQL注入式攻击的方法

ASP.NET程序防范SQL注入式攻击的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  要防

知识大全 ASP.NET网站程序防SQL注入式攻击方法

ASP.NET网站程序防SQL注入式攻击方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一什么是