黑马程序员之ADO.NET学习笔记:.NET中被大家容易忽视的问题

本文是作者的ADO.NET学习笔记,分享了一些在.NET编程中可能被忽视但实用的方法,如DataTable的Merge操作,DataRow的ItemArray直接赋值,以及使用List的Find方法和Convert.ToInt32、string.Format的重载方法进行快速进制转换。
摘要由CSDN通过智能技术生成

--------------------------------------------------- 2345王牌技术员联盟2345王牌技术员联盟、期待与您交流!---------------------------------------------------------

下面就说说被我忽视过的方法。当然,每个人的编程经历,涉猎面及对.NET的认知程度都不一样。所以,这只是一家之言,肯定有很多不足之处,欢迎大家批评指正。

DataTable.Merge()
如何合并两张表?自己以前写的方法:
private void UniteTable(DataTable sourceTable, DataTable targetTable)
        {
            foreach (DataRow row in sourceTable.Rows)
            {
                DataRow newRow = targetTable.NewRow();
                //将sourceTable中row的值赋给对应的targetTable中的row
                newRow["column1"] = row["column1"];
                //...
                targetTable.Rows.Add(newRow);
            }
        }
哎,这个方法很傻很天真吧,其实DataTable中早就提供了合并两张表的方法,就是DataTable.Merge()。合并两张表,只要一条语句就行:

targetTable.Merge(sourceTable);

DataRow.ItemArray



结构相同的情况下,如何将一行的值赋给另一行?自己以前都这样写:

            DataRow row1 = table1.Rows[0];
            DataRow row2 = table2.Rows[0];
            row1["column1"] = row2["column1"];
            row1["column2"] = row2["column2"];
            //...老天,要是有30多个列我可怎么办。其实DataRow有个ItemArray属性,只要一句话就完成了:
            row1.ItemArray = row2.ItemArray;SqlCommand.Parameters.AddWithValue()

SqlCommand执行存储过程的时候怎么增加参数,类似这样做就可以了:
             //设置参数名和类型
             cmd.Parameters.Add("@Target", SqlDbType.NChar);
             cmd.Parameters.Add("@Description", SqlDbType.NChar);
             cmd.Parameters.Add("@Actor", SqlDbType.NChar);
             //给参数赋值
             cmd.Parameters[0].Value = "ATarget";
             cmd.Parameters[1].Value = "Description";
             cmd.Parameters[2].Value = "Actor";

           

              上面都分了两步,增加参数,然后再给参数赋值,其实我们可以一步到位的:

              cmd.Parameters.AddWithValue("@Actor", "Actor");
              cmd.Parameters.AddWithValue("@Target", "Target");
              cmd.Parameters.AddWithValue("@Description", "Description"); 2. 集合类

List.AddRange()
怎么在List中怎样添加多个值,曾经的我是这样子的:
List<int> list = new List<int>();
            list.Add(1);
            list.Add(2);
            list.Add(3);
            list.Add(4);//其实完全可以用一个方法就搞写,它就是AddRange().(在很多类中都有AddRange(),这里我只是用LIST来举例)

            list.AddRange(new int[] { 1,2,3,4});List.Find()与List.FindAll()

在List中查找特定值?以前我都是这样做:

          foreach (int i in list)
            {
                if (i == 3)
                {
                    Console.Write(i);
                }
            }
           //其实完全可以不用foreach循环,用Find()就可以很好的解决:(FindAll()与Find()用法相似)

           //int result = list.Find(delegate(int i)

             {

                    return i == 3;

             }

  


DataGridView.HitTest()
DataGridView中如何获取当前鼠标位置所在的行数与列数?我认为DataGridView会有这样的方法,但找了很久都没找到。终于工夫不负有心人,在VS智能提示下点点终于找到了。只怪这坑爹的命名HitTest?为毛不是Get,Find,Index之类开头啊。返回值还是一个内部类:DataGridView.HitTestInfo

            //捕获鼠标点击区域的信息
            DataGridView.HitTestInfo hitTestInfo= this.sourceGrid.HitTest(e.X, e.Y);
            //获取所在行数
            int rowIndex = hitTestInfo.RowIndex;
            //获取所在列数
            int columnIndex = hitTestInfo.ColumnIndex;ListBox.IndexFromPoint()
            同样的,ListBox也有一个根据Point来获取行数的方法,即IndexFromPoint().你看,这个命名好多了:
            // Get the index of the item the mouse is below.
            indexOfItemUnderMouseToDrag = ListDragSource.IndexFromPoint(e.X, e.Y);4.其它

进制转换.

以前做进制转换,比如十六进制转八进制,还自己写过一个独立的方法。坑爹的,其实远不用这么麻烦,Convert.ToInt32()与string.Format()都有提供重载方法来实现:

//将十六进制“10”转换为十进制i

  int i = Convert.ToInt32("10", 16);

//将十进制i转换为十六进制s

  string s = string.Format("{0:X}", i);


--------------------------------------------------- 2345王牌技术员联盟2345王牌技术员联盟、期待与您交流!---------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值