知识大全 在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注入式攻击 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一什么是
知识大全 ASP.NET中备份SQL Server数据库的方法
ASP.NET中备份SQLServer数据库的方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
今天开发人员让我优化一个sql
在中可以通过MySQLDatadll来操作mysql数据库写法跟操作SQL数据库类似下面是相关的例子 一打开mysql数据库&nb
ASP.NET实现SQL注入过滤 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一什么是SQL注入式
ASP.NET调用.sql文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 笔者好久没有写随笔
ASP.NET恢复备份Sqlserver 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最近做的
ASP.NET程序防范SQL注入式攻击的方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 要防
ASP.NET网站程序防SQL注入式攻击方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一什么是