C#学习纪要(8):7月17日

7月17日    星期五       天气晴

实习两个星期了。感觉自己对C#的了解有了一定程度的进步,但是编码还是不够熟练,模块完成的速度不快,看来还是要努力才行。

ps: 我要把握自己的幸福啊。可是现在只能等待天使的calling。等吧等吧。愿意等你一生一世。

 

今天要做什么呢?

首先,把数据库导出成Access文件那一块完成了。然后去看看上传,下载的那一块怎么弄。再然后去把删除的做完。记得一定是要在本地数据库上面操作才好。如果这些都做完还剩时间,那就自己先测试一下吧,感觉Bug还是挺多的。要抓紧时间总结。

10:27-----遇到问题:在database.Tables.append(table)语句中,返回一个COMException,提示是类型无效。

原因是提供程序可以接受的表中的列仅识别的数据类型。 每个提供程序是不同和特定顺序存储的数据库格式。

常量 值 Jet 3.51 Jet 4.0 SQL 7.0
adBinary 128
adBoolean 11
adChar 129 来
adCurrency 6
adDate 7
adDouble 5
adGUID 72
adInteger 3
adLongVarBinary 205
adLongVarChar 201 已
adLongVarWChar 203
adNumeric 131是 (使用信息) *是 (使用信息) *
adSingle 4
adSmallInt 2
adUnsignedTinyInt 17
adVarBinary 204
adVarChar 200
adVarWChar 202
adWChar 130
adDBTimeStamp 135


* 如果您使用 adNumeric 数据类型 Microsoft Jet 4.0 和 Microsoft SQL Server 7.0,必须设置精度。

所以不能使用adVarChar,要使用adVarWChar。恩。改了就对了。

 

11:34----------看看ADO.NET。看来对C#的了解真的是一张白纸,啥也不知道。不过用了就要知道了。

-----------------------------------------------------------------------------------------------------------------------------------------

ADO.NET 要点记录

* 与ADO的不同之处。

     ---------ADO 的主要对象是Connection Command RecordSet和Filed. 而ADO.NET新增了DataSet DataTalbe DataView等新类。

                 ADO.NET 最重要的新特性是这些新类,如DataSet等,是以断开连接的方式工作的,比如DataSet,dataset就彷佛是内存中的数据库,当从远程服务器中把数据下载过来后,连接断开,在本地处理数据,完了后再建立连接。这里摘抄一段:

    “ADO2.1引入了断开连接的记录集,允许从数据库中检索数据,把他们传送给客户机,进行处理再重新连接服务器。但他们使用起来常常很繁琐,因为断开连接的工作方式不是一开始就设计好的。ADO.NET则不同,除了一种情况(<provider>DataReader)外,他们都用于脱机处理数据库”

 

 

16:36------------上来冒个泡。ADO.NET的内容之后以后再补上了。还是要先完成任务。

            -------------刚刚算是学习了一下LINQ的语法,比如Join,不如符合from。发现真的是挺博大精深的。

            ----------- 还有的就是LINQ的实现原理,这个是目前仍然是一知半解的,知道一点,但是又不完全明白,使用了非常多的泛型,扩展方法,匿名委托,相当灵活。

          ------------  可惜LINQ的强大语法我都用不上,我要做的是从几个表中将有用的字段的记录都拿出来,然后写入到Access数据库中。

   -------------------我的做法是先用from句式读出主表的对象集合。

                           像这样:

                                  var memberCardTable = from mc in database.mb_MemberCard select mc;

                                 然后在一个foreach里面,读出这些对象中需要用到的字段。

                                 而那些在这些对象中没有的字段,也就是在其他表中的,用这样的方法:

                                    string level = database.mb_MemberType.First(r=>r.MemberTypeID==memberCard.MemberTypeID).MemberTypeName;
                string memberName = database.mb_Member.First(r => r.MemberID == memberCard.MemberID).MemberName;
                string cellPhone = database.mb_Member.First(r => r.MemberID == memberCard.MemberID).MobileNumber;

                    用的是一个First方法,用来返回第一个符合条件的结果。而条件是使用r表达式写的。

       ---------------  写入数据库的过程也是很简单啦。跟JDBC差不多的。

       ----------------  先建立连接。 用OleConnection,写个连接字符串就行。

       ----------------- 然后建一个OleCommand,用它的ExecuteNoneQuery方法来执行插入的SQL语句。

      ---------------- - 插入的SQL语句可以用很原始的方法去写,像这样:

string commandString = "INSERT INTO [Member Info] values ("
                                       +"'" + cardID + "',"
                                       +"'" + memberName + "',"
                                       +"'" + level + "',"
                                       +"'" + cellPhone + "')";

        非常需要注意的一点事表名啊,member info,周围一定要加上[ ]!!!这个小BUG就让我爽了好一阵子。还有,原来关键字一定要大写。hollyshit.

Transact-SQL 语法规则:http://www.ebok.cn/NetWork/Servers/Servers-33012.html

17:28 ------------------ 终于完成了会员信息导出成mdb的模块。

最后补充一下SQL语句是怎么写的:

            首先定义SQL语句:

           string commandString ="INSERT INTO [Member Info] values(@cardID, @memberName, @level, @cellPhone ,@consumptionSum,@score)";

           @后面跟一个变量名,这表示的是SQL变量。

          然后从command中获取一个参数集合:

          OleDbParameterCollection parameters = command.Parameters;

           这是一个容器变量,然后往里面添加我们各个字段的名称和类型,注意名称跟SQL语句中的变量名是一致的。

          parameters.Add(new OleDbParameter("@cardID", OleDbType.VarWChar));
          parameters.Add(new OleDbParameter("@memberName", OleDbType.VarWChar));
          parameters.Add(new OleDbParameter("@level", OleDbType.VarWChar));
          parameters.Add(new OleDbParameter("@cellPhone", OleDbType.VarWChar));
          parameters.Add(new OleDbParameter("@consumptionSum", OleDbType.Currency));
          parameters.Add(new OleDbParameter("@score", OleDbType.Currency));

          这是为了要定义每一个字段的数据类型。

          最后一步就是为各个变量添加具体的值:

            parameters[0].Value = cardID;
                parameters[1].Value = memberName;
                parameters[2].Value = level;
                parameters[3].Value = cellPhone;
                parameters[4].Value = consumptionSum;
                parameters[5].Value = score;
         当然了这些值都是在上面用LINQ语句获得了的。

         最后executeNoneQuery().大功告成!

          这个星期又将要结束了。感觉还是挺充实的。下星期继续努力吧。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值