zoukankan      html  css  js  c++  java
  • winform学习笔记02

    1. Hashtable 数据遍历的几种方式

          ---Hashtable 在集合中称为键值对,它的每一个元素的类型是 DictionaryEntry,由于Hashtable对象的键和值都是Object类型,决定了它可以放任何类型的数据

    1.  Hashtable ht = new Hashtable();
      29             ht.Add("1", person1);
      30             ht.Add("2", person2);
      31             ht.Add("3", person3);
      32             ht.Add("4", person4);
      33             ht.Add("5", person5);
      34             Console.WriteLine("请输入你的查询的用户名:");
      35             string strName = Console.ReadLine();
      36             //第一种方法
      37              foreach (string item in ht.Keys)
      38             {
      39                 Person p = (Person)ht[item];
      40                 if (strName == p.Name)
      41                 {
      42                     Console.WriteLine("查询后的结果是:" + p.Name + "	" + p.Email + "	" + p.Age);
      43                 }
      44             }
      45 
      46 
      47 
      48             //第二种方法
      49              foreach (Person item in ht.Values)
      50             {
      51                 if (item.Name == strName)
      52                 {
      53                     Console.WriteLine("查询后的结果是:" + item.Name + "	" + item.Email + "	" + item.Age);
      54                 }
      55 
      56             }
      57             //第三种方法
      58              foreach (DictionaryEntry item in ht)
      59             {
      60                 if (strName == ((Person)item.Value).Name)
      61                 {
      62                     Console.WriteLine("查询后的结果是:" + ((Person)item.Value).Name + "	" + ((Person)item.Value).Email + "	" + ((Person)item.Value).Age);
      63                 }
      64             }
      65 
      66             //第四种方法
      67              IDictionaryEnumerator id = ht.GetEnumerator();
      68             while (id.MoveNext())
      69             {
      70              Person p =   (Person)ht[id.Key];
      71              if (p.Name == strName)
      72              {
      73                  Console.WriteLine("查询后的结果是:" + p.Name + "	" + p.Email + "	" + p.Age);
      74              }
      75             }
    2. mysql存储过程游标的使用范例
      使用table 记录CURSOR FETCH 出来的值
      
      CREATE PROCEDURE processorders()
      BEGIN
       
           DECLARE o INT;
           DECLARE done BOOLEAN DEFAULT 0;
           DECLARE t DECIMAL(8,2);
       
           DECLARE ordernumbers CURSOR
           FOR
           SELECT order_num FROM orders;
       
           -- Declare continue handler
           DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
           -- SQLSTATE '02000' 是一个未找到条件,当没有更多行可读的时候设置 done = 1 然后退出
       
           -- 创建table
           CREATE TABLE IF NOT EXISTS ordertotals(
                order_num INT, total DECIAML(8,2)
           );
       
           OPEN ordernumbers;
           REPEAT
       
                FETCH ordernumbers INTO o;
                CALL ordertotal(o,1,t); -- 调用过程
       
                -- 插入table
                INSERT INTO ordertotals(order_num, total)
                VALUES(o,t);
       
           UNTIL done END REPEAT;
       
           CLOSE ordernumbers;
      END;
    3. 事务处理( transaction processing) 可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么不执行。
      几个术语:
      事务:transaction 指一组SQL语句
      回退:rollback 指撤销指定SQL语句过程
      提交:commit 指将为存储的SQL语句结果写入数据库表
      保留点:savepoint 指事务处理中设置的临时占位符,你可以对它发布退回
      -------------
      SELECT * FROM ordertotals;
      START TRANSACTION;
      DELETE FROM ordertotals; --删除表
      SELECT * FROM ordertotals; -- 确认删除
      ROLLBACK; -- 回滚
      SELECT * FROM ordertotal; -- 再次显示
       
      --------------commit
      一般的MySQL语句都是直接针对数据库表进行操作,进行隐含的提交,即提交操作是自动执行的。
      在 事务处理中,提交不会隐含执行,需要使用COMMIT语句。
      START TRANSACTION;
      DELETE FROM orderitems WHERE order_num = 20010;
      DELETE FROM orders WHERE order_num = 20010;
      COMMIT;
    4. MySql与SqlServer的一些常用SQL语句用法的差别
    5. 
      
      本文将主要列出MySql与SqlServer不同的地方,且以常用的存储过程的相关内容为主。
      
      1. 标识符限定符
      
      SqlServer    []
      MySql    ``
      2. 字符串相加
      
      SqlServer    直接用 +
      MySql    concat()
      3. isnull()
      
      SqlServer    isnull()
      MySql    ifnull()
      注意:MySql也有isnull()函数,但意义不一样
      4. getdate()
      
      SqlServer    getdate()
      MySql    now()
      5. newid()
      
      SqlServer    newid()
      MySql    uuid()
      6. @@ROWCOUNT
      
      SqlServer    @@ROWCOUNT
      MySql    row_count()
      注意:MySql的这个函数仅对于update, insert, delete有效
      7. SCOPE_IDENTITY()
      
      SqlServer    SCOPE_IDENTITY()
      MySql    last_insert_id()
      8. if ... else ...
      
      SqlServer    
      IF Boolean_expression 
           { sql_statement | statement_block } 
      [ ELSE 
           { sql_statement | statement_block } ] 
       
      -- 若要定义语句块,请使用控制流关键字 BEGIN 和 END。
      MySql    
      IF search_condition THEN statement_list
          [ELSEIF search_condition THEN statement_list] ...
          [ELSE statement_list]
      END IF
      注意:对于MySql来说,then, end if是必须的。类似的还有其它的流程控制语句,这里就不一一列出。
      
      9. declare
      
      其实,SqlServer和MySql都有这个语句,用于定义变量,但差别在于:在MySql中,DECLARE仅被用在BEGIN ... END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。这个要求在写游标时,会感觉很BT.
      
      10. 游标的写法
      
      SqlServer    
      declare @tempShoppingCart table (ProductId int, Quantity int)
      insert into @tempShoppingCart (ProductId, Quantity)
          select ProductId, Quantity from ShoppingCart where UserGuid = @UserGuid
      
      
      declare @productId int
      declare @quantity int
      declare tempCartCursor cursor for 
              select ProductId, Quantity from @tempShoppingCart
      
      open tempCartCursor
      fetch next from tempCartCursor into @productId, @quantity
      while  @@FETCH_STATUS = 0
      begin
          update Product set SellCount = SellCount + @quantity    where productId = @productId
      
          fetch next from tempCartCursor into @productId, @quantity
      end
      
      close tempCartCursor
      deallocate tempCartCursor
      MySql    
      declare m_done int default 0;
      declare m_sectionId int;
      declare m_newsId int;
      
      declare _cursor_SN cursor for select sectionid, newsid from _temp_SN;
      declare continue handler for not found set m_done = 1;
      
      create temporary table _temp_SN 
          select sectionid, newsid from SectionNews  group by sectionid, newsid having count(*) > 1;
      
      open _cursor_SN;
      while( m_done = 0 ) do
          fetch _cursor_SN into m_sectionId, m_newsId;
          
          if( m_done = 0 ) then 
              -- 具体的处理逻辑
          end if;
      end while;
      close _cursor_SN;
      drop table _temp_SN;
      注意:为了提高性能,通常在表变量上打开游标,不要直接在数据表上打开游标。
      
      11. 分页的处理
      
      SqlServer    
      create procedure GetProductByCategoryId( 
          @CategoryID int, 
          @PageIndex int = 0, 
          @PageSize int = 20, 
          @TotalRecords int output
      ) 
      as
      begin
           
      declare @ResultTable table
      ( 
          RowIndex int, 
          ProductID int, 
          ProductName nvarchar(50), 
          CategoryID int, 
          Unit nvarchar(10), 
          UnitPrice money, 
          Quantity int
      ); 
           
      insert into @ResultTable 
      select row_number() over (order by ProductID asc) as RowIndex, 
             p.ProductID, p.ProductName, p.CategoryID, p.Unit, p.UnitPrice, p.Quantity 
      from   Products as p 
      where CategoryID = @CategoryID; 
             
      select  @TotalRecords = count(*) from  @ResultTable; 
           
      select * 
      from   @ResultTable 
      where  RowIndex > (@PageSize * @PageIndex) and RowIndex <= (@PageSize * (@PageIndex+1)); 
           
      end;
      当然,SqlServer中并不只有这一种写法,只是这种写法是比较常见而已。
      
      MySql    
      create procedure GetProductsByCategoryId(
         in _categoryId int,
         in _pageIndex int,
         in _pageSize int,
         out _totalRecCount int
      )
      begin
       
         set @categoryId = _categoryId;
         set @startRow = _pageIndex * _pageSize;
         set @pageSize = _pageSize;
       
         prepare PageSql from 
          'select sql_calc_found_rows * from product  where categoryId = ? order by ProductId desc limit ?, ?';
         execute PageSql using @categoryId, @startRow, @pageSize;
         deallocate prepare PageSql;
         set _totalRecCount = found_rows();
       
      end
      MySql与SqlServer的差别实在太多,以上只是列出了我认为经常在写存储过程中会遇到的一些具体的差别之处
    6. winform程序动态加载控件,总是窗体先出现,防止窗体上的控件闪一下,在主窗体里加入如下代码:
               /// <summary>
              /// 防止窗体闪烁
              /// </summary>
              protected override CreateParams CreateParams
              {
                  get
                  {
                      CreateParams cp = base.CreateParams;
                      cp.ExStyle |= 0x02000000;
                      return cp;
                  }
              }
  • 相关阅读:
    微软SmartClient高级开发
    JavaScript教程大全目录( 最后更新:2007/2/27 不断更新中...)
    智能客户端的定义
    JavaScript浏览器输出
    事半功倍系列之javascript
    智能客户端SmartClient (三)
    智能客户端SmartClient (一)
    日文假名输入与键盘对应
    连体词、接续词、接续助词相关
    JavaScript表单
  • 原文地址:https://www.cnblogs.com/step-city/p/6070543.html
Copyright © 2011-2022 走看看