No.11.2C#与数据库的连接在金融工程中,数据是一切研究的生命线。因此,一个优秀的团队通常都会有自己的数据库系统。在我们使用MATLAB编程时,常采用Wind接口API来调取数据。然而,C#对于数据库的操作更为强大。本篇笔记介绍如何实现C#与数据库的交互,以及将读取的数据存储成何种形式。一、概览在实践中,MySQL和Oracl是两个较为常见的数据库系统。本篇笔记以MySQL与C#的互联为例进行说明,这与使用C#与Oracl之间的互联几乎是完全一样的。通常来讲,C#与数据库之间的操作可以分为以下三个步骤:1)C#与数据库的连接:SqlConnction对象;2)SQL语句的执行和结果返回:SqlCommand对象、SqlDataRadr对象、SqlAdaptr对象、SqlCommandBuildr对象;3)对上一步返回的结果进行操作计算等。图1.Nt与数据库互联关系网本篇笔记将对这三个步骤进行介绍,并且仍然以前面介绍过的股票多因子模型的数据为案例进行说明,下表是我们需要进行读取和操作的对象。其中表示因子ID、因子全名和因子简称。图2股票多因子数据概览首先进行预定义:UsingSystm.Data.SqlClint;UsingSystm.Data;二、数据库连接:SqlConnctionconn=nwSqlConnction();conn.ConnctionString=“srvr=..XXX.XXX;databas=XX;uid=XX;pwd=XX”;conn.Opn();Consol.WritLin(“数据库连接状态为:{0}”,conn.Stat);三、数据操作这一部分涉及到的对象较多,其中SQL命令的对象为SqlCommand,用于存储命令的内容、格式等;SQL内容读取的对象有两种,分别为SqlDataRadr和SqlDataAdaptr;对数据库进行修改需要用到SqlCommandBuildr对象。3.1SqlCommand:设置SQL命令SqlCommandcmd=nwSqlCommand();cmd.Connction=conn;//绑定连接通道cmd.CommandTyp=Systm.Data.CommandTyp.Txt;//设置命令类型cmd.CommandTxt=“slct*fromfactor_list”;//设置命令内容3.2SqlDataRadr和SqlDataAdaptr采用SqlDataRadr可以直接一行一行读取数据集,采用DataSt联合SqlDataAdaptr来操作数据库。二者都可以用来读取数据库内容,但也有一些主要的区别:SqlDataRadr读取的内容是只读的,直接访问数据库,效率较高,但是只能一行一行读取,且读完之后不能返回读,因此使用相对不方便;SqlDataAdaptr是将数据一次性读取到本地,并在本地建立一个微型数据库,然后使用它来操作这个数据库。这种方式使用方便,更简单,但是性能比第一种稍差。SqlDataRadrradr=cmd.ExutRadr();//执行cmd中的命令语句,并将内容返回给radr对象,之后采用Rad()函数一行一行读取,一行读完后自动跳入下一行:Dictionaryint,stringfactor=nwDictionaryint,string();Whil(radr.Rad()){Factor.Add(radr[“FactorId”],radr[“FactorShortNam”])Consol.WritLin(radr[“FactorShortNam”]);}Radr.Clos();Radr.Dispos();以上命令将数据读取出来,并且存入到一个factor的字典序中,键表示factorid,值表示factorshortnam.需要注意的是,采用SqlDataRadr获取的内容是只读的,如果要对数据进行修改、更新,就需要用到DataSt与SqlDataAdaptr对象。SqlDataAdaptrmyDataAdaptr=nwSqlDataAdaptr();myDataAdaptr.SlctCommand=cmd;//将SQL命令与myDataAdaptr连接起来DataStmyDataSt=nwDataSt();myDataAdaptr.Fill(myDataSt,“factor”)//表示运行cmd命令,并将命令保存到myDataSt中的factor表格中[1]。这样,用cmd命令读取的结果就被存储到myDataSt中,可以对此进行遍历。可以理解为,数据集DataSt中包含多个数据表DataTabl,每个数据表DataTabl中又有DataRow和DataColumn。DataTablmyTabl=myDataSt.Tabls[“factor”];forach(DataRowmyrowinmyTabl.Rows)forach(DataColumnmycolumninmyTabl.Columns)Consol.WritLin(myRow[mycolumn]);3.3SqlCommandBuildr如果要对数据进行修改,还需要借助SqlCommandBuildr对象。SqlCommandBuildrcmdbuildr=nwSqlCommandBuildr(myDataAdaptr);myDataAdaptr.Updat(myDataSt,“factor”)//将数据写入factor表格中DataRowmyNwRow=myTabl.NwRow();myNwRow[“FactorId”]=;myNwRow[“FactorFullNam”]=“C#测试新变量”;myNwRow[“FactorShortNam”]=“新变量”;myTabl.Rows.Add(myNwRow);myDataAdaptr.Updat(myDataSt,“factor”)四、数据通道释放将之前打开的通道释放掉:Conn.Clos();Con.Dispos();myDataSt.Dispos()’myDataAdaptr.Dispos();五、采用C#与Oracl互联采用C#读取Oracl中的数据并进行操作,与操作MySQL数据库的命令几乎完全一样,不同是需要将所有命令中Sql部分全部换成Oracl。需下载Oracl.ManagdDataAccss.dll之后再在项目中对其进行引用。此外,对于数据库的连接语句会有如下修改:stringconnString="DataSourc=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=XXXX)(PORT=XXXX))(CONNECT_DATA=(SERVICE_NAME=XXXX)));PrsistScurityInfo=Tru;UsrID=XX;Password=XX;";以上数据源的部分,加入你知道你的数据库为orcl,可以在windows的命令框中输入如下指令获取:Tnspingorcl六、小结在C#的操作中,我们惯用数据库系统。实际上,直接对数据库操作比从wind接口中读取来得更为方便。在将数据读取之后,无论是存成SqlDataRadr格式还是DataSt格式,都需要将其转换为我们方便操作的数据,如List、Dictionary等等。因此,我们需要更详细地了解如何对DataSt数据进行操作,还需要更多学习。下面小结给出了以下几个对象之间的通讯:SqlConnctionconn;SqlCommandcmd;SqlAdaptrmyAdaptr;SqlDataRadrmyDataRadrSqlCommandBuildrmyCommandBuildr;Cmd.connction=conn;SqlDataRadr=cmd.ExcutRadr();myDataAdaptr.SlctCommand=cmd;myDataAdaptr.Fill(myDataSt,“tablnam”);myCommandBuildr.Updat(myDataSt,“tablnam”);参考链接:[1]白癜风正规医院北京看白癜风哪家医院专业
转载请注明原文网址:http://www.helimiaopu.com/cxtx/3993.html |