【c#】机房重构之零散知识点

前言

  机房重构是一个学习的机会,也是对C#实际应用的一个机会。

正文

一、将两个表合并

原本表格数据:
【c#】机房重构之零散知识点_第1张图片
【c#】机房重构之零散知识点_第2张图片
1、两个表纵向合并(属性不同)

		    dataGridView1.AllowUserToAddRows = false;
            DataTable newdt = dt1.Clone();//将表1中的数据给新表
            //确定共有几列
            foreach (DataColumn dc in dt2.Columns)
            {
                foreach (DataColumn v in dt1.Columns)
                {
                    if (dc.ColumnName == v.ColumnName)
                    {
                        dc.ColumnName = v.ColumnName + "3";
                    }
                }
                newdt.Columns.Add(dc.ColumnName);//将表2中的列加入到新表
            }

            object[] obj = new object[newdt.Columns.Count];
            //添加表一中的数据到新表
            for (int i = 0; i < dt1.Rows.Count; i++)
            {
                dt1.Rows[i].ItemArray.CopyTo(obj, 0);
                newdt.Rows.Add(obj);
            }

            if (dt1.Rows.Count >= dt2.Rows.Count)
            {
                for (int i = 0; i < dt2.Rows.Count; i++)
                {
                    for (int j = 0; j < dt2.Columns.Count; j++)
                    {
                        newdt.Rows[i][j + dt1.Columns.Count] = dt2.Rows[i][j].ToString();
                    }
                }
            }
            else
            {
                DataRow dr3;
                for (int i = 0; i < dt2.Rows.Count - dt1.Rows.Count; i++)
                {
                    dr3 = newdt.NewRow();
                    newdt.Rows.Add(dr3);
                }
                for (int i = 0; i < dt2.Rows.Count; i++)
                {
                    for (int j = 0; j < dt2.Columns.Count; j++)
                    {
                        newdt.Rows[i][j + dt1.Columns.Count] = dt2.Rows[i][j].ToString();
                    }
                }
            }
            dataGridView1.DataSource = newdt;       

实验结果:
【c#】机房重构之零散知识点_第3张图片

2、两个表横向合并(属性相同)

DataTable newDataTable = DataTable1.Clone();//新表
 object[] obj = new object[newDataTable.Columns.Count];
 //添加DataTable1的数据
 for (int i = 0; i < DataTable1.Rows.Count; i++)
 {
     DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);
     newDataTable.Rows.Add(obj);
 }
 //添加DataTable2的数据
 for (int i = 0; i < DataTable2.Rows.Count; i++)
  {
      DataTable2.Rows[i].ItemArray.CopyTo(obj, 0);
      newDataTable.Rows.Add(obj);
  }

实验结果:
【c#】机房重构之零散知识点_第4张图片

二、sql语句中like的使用
string consumesql = @"select SUM(ConsumeCash) as 消费金额 from Line_info where convert(varchar(100), GETDATE(), 23) like " + "'%" + date + "%' and isCheck='未结账'"

这里的like的使用和VB中处理的方式是一样的,后面添加的是字符串,一定要注意的是后面添加的时候要用“”进行拼接,否则就无法出现你要的结果。

三、@的意义

在敲机房重构的时候,@符号出现的次数可以说是很多次。
1、字符串跨行
例如:

string studentsql = @"update line_info set ConsumeTime=@consumeTime,ConsumeCash=@consumeCash where CardID=@CardID and Status='上机'";

在写sql语句的时候可能会很长,这个时候可能会涉及到换行,这个时候就要用到@,可以很方便的换行,以免出现差错
2、忽略转义字符
进行数据库传递参数的时候,很多地方都使用了@
例如:

SqlParameter[] sqlParams = { new SqlParameter("@CardID", LineInfo.CardID),
                new SqlParameter("@consumeCash", LineInfo.ConsumCash),
                new SqlParameter("@consumeTime", LineInfo.ConsumeTime)

这里的@符号就是忽略转义字符,防止输入转义字符而报错。
3、用于标识符中
在C#中是不允许关键字作为标识符的,但是如果在关键字前面加上@就可以使用啦。

你可能感兴趣的:(C#,c#成长之路)