博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
winform学习笔记02
阅读量:6167 次
发布时间:2019-06-21

本文共 7053 字,大约阅读时间需要 23 分钟。

  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 + "\t" + p.Email + "\t" + 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 + "\t" + item.Email + "\t" + 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 + "\t" + ((Person)item.Value).Email + "\t" + ((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 + "\t" + p.Email + "\t" + 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. @@ROWCOUNTSqlServer    @@ROWCOUNTMySql    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 = @UserGuiddeclare @productId intdeclare @quantity intdeclare tempCartCursor cursor for         select ProductId, Quantity from @tempShoppingCartopen tempCartCursorfetch next from tempCartCursor into @productId, @quantitywhile  @@FETCH_STATUS = 0begin    update Product set SellCount = SellCount + @quantity    where productId = @productId    fetch next from tempCartCursor into @productId, @quantityendclose tempCartCursordeallocate tempCartCursorMySql    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) asbegin     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(); endMySql与SqlServer的差别实在太多,以上只是列出了我认为经常在写存储过程中会遇到的一些具体的差别之处

     

  6. winform程序动态加载控件,总是窗体先出现,防止窗体上的控件闪一下,在主窗体里加入如下代码:
    ///         /// 防止窗体闪烁        ///         protected override CreateParams CreateParams        {            get            {                CreateParams cp = base.CreateParams;                cp.ExStyle |= 0x02000000;                return cp;            }        }

     

转载于:https://www.cnblogs.com/step-city/p/6070543.html

你可能感兴趣的文章
IOSday04 UIButton使用
查看>>
铁大好青年内部分组
查看>>
unity3D ——自带寻路Navmesh入门教程(一)(转)
查看>>
判断字符串是否为数字的函数
查看>>
[emuch.net]MatrixComputations(7-12)
查看>>
linux 命令 — 文件相关
查看>>
自己空闲的时候封装一下
查看>>
Datagard產生gap
查看>>
本机web开发环境的搭建--nginx篇
查看>>
rcnn 理解笔记
查看>>
问答项目---登陆验证码点击切换及异步验证验证码
查看>>
plist文件中iphone和ipad的应用图片设置
查看>>
搜集的一些资源网站链接
查看>>
struts2中类型转换器的使用
查看>>
11G Oracle RAC添加新表空间时数据文件误放置到本地文件系统的修正
查看>>
从91移动应用发展趋势报告看国内应用现状
查看>>
【ORACLE技术嘉年华PPT】MySQL压力测试经验
查看>>
Linux下汇编调试器GDB的使用
查看>>
css溢出机制探究
查看>>
vue中如何实现后台管理系统的权限控制
查看>>