个人工作总结
经常逛CSDN,总是获取,今天看见别人把工作总结写了出来,我也想写一下,虽然可能有错误、很肤浅、很杂、但我还是要写一下。 离开学校半年了,在一小公司打工,属于有什么活做什么事的那种。 ? C++/MFC: 由于MFC做的程序很丑(VS2005及以下),可能有多种界面解决方案。大公司有自己的图形库,或者买市面上的图形库。但是还有一个方案值得一提,虽然我做的不好,就是CDHtmlDialog类,据说windows XP的控制面板(分类视图)是用的这种方案,还有诺顿的也采用了这种。当然,现在vs2008 sp1就比较好了。 ? API: ???????? GetSystemDirectory(szSysFolder,MAX_PATH);获得系统目录:一般为c:/windows/system32 If(0 < GetPrivateProfileString("Server", ??????????????????????????????????????????????????????????????????????????????????? "nHardIDTypeTest", ??????????????????????????????????????????????????????????????????????????????????? NULL, ??????????????????????????????????????????????????????????????????????????????????? szIsOffMode, ??????????????????????????????????????????????????????????????????????????????????? sizeof(szIsOffMode), ??????????????????????????????????????????????????????????????????????????????????? CfgLocalFileName))读取ini文件相应键的值,返回读取的字符个数,所以GetPrivateProfileString()>0表示获得了数据,操作成功 WinExec(FileName,SW_HIDE);运行外部exe ? int 转cstring: int i=11; cstring cstemp; cstemp.format(“%d”,i); ? itoa() ? Cstring 转char* Cstring cstemp =”ddddddddd”; Cstemp.getbuffer(cstemp.getlength()); ? ???????? char *lpAuthoID=new char[csTemp.GetLength()]; ???????? memset(lpAuthoID,csTemp.GetLength()); ???????? strcpy(lpAuthoID,csTemp);// csTemp为Cstring类型 基于对话框的应用程序中: InitInstance():初始化实例,,最先执行 return false;表示退出应用程序 OnInitDialog():初始化对话框,,oncancel()表示退出 全局变量与全局函数:放在XXXDlg.cpp文件的即可,或者放在另外一个专门的cpp文件中 成员变量与成员函数:可以通过鼠标操作自动添加 获得控件的数据 GetDlgItem(IDC_EDIT_CLIENTVERSION)->GetWindowText(csClientVersion); ? 文件操作API: ?????????? HANDLE hFileBag =CreateFile(csOfflineBagName, ???????????????????????????? ?????????????????????????????????????????????? ? GENERIC_READ, ??????????????????????????????????????????????????????????????????????????? ? FILE_SHARE_READ, ??????????????????????????????????????????????????????????????????????????? ? NULL, ??????????????????????????????????????????????????????????????????????????? ? OPEN_EXISTING, ??????????????????????????????????????????????????????????????????????????? ? FILE_ATTRIBUTE_NORMAL, ??????????????????????????????????????????????????????????????????????????? ? NULL); ?????????? if (hFileBag == INVALID_HANDLE_VALUE) ?????????? { ??????????????????? ::MessageBox(NULL,"无法读取离线包文件","安装",MB_OK); ??????????????????? return ; ?????????? } ?????????? DWORD nFileLen=GetFileSize(hFileBag,NULL); ? ?????????? char szOffFileBuf[1024]={0};; ?????????? DWORD nBytesRead; ?????????? ReadFile(hFileBag,szOffFileBuf,1024,&nBytesRead,NULL); ?????????? CloseHandle(hFileBag); Strnicmp():比较两个字符串前N个字符,且不区分大小写 ? ?????????????????? DWORD nLen=0; //由于返回的char*中可能含/0,所以CreateClientCfgAll()使用一个输出参数nLen指示char*的长度 ?????????????????? char *lpFileBuf=CreateClientCfgAll(lpDB,csUserName,g_HardID,nLen); ?????????????????? if (lpFileBuf != NULL) ?????????????????? { ??????????????????????????? if (nLen > 0) ??????????????????????????? {//创建一个文件 ???????????????????????????????????? HANDLE hFileCfgAll =CreateFile(szCfgAllFileName, ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? GENERIC_READ|GENERIC_WRITE, ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? FILE_SHARE_READ, ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? NULL, ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? OPEN_ALWAYS, ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? FILE_ATTRIBUTE_NORMAL, ??????????????????????????????????????????????????????????????????????????????????????????????????????????????? NULL); ???????????????????????????????????? if (hFileCfgAll != INVALID_HANDLE_VALUE) ???????????????????????????????????? {//设置文件指针到文件的起始位置 ?????????????????????????????????????????????? SetFilePointer(hFileCfgAll,NULL,FILE_BEGIN); ?????????????????????????????????????????????? DWORD dw; //向文件写入内容 ?????????????????????????????????????????????? WriteFile(hFileCfgAll,lpFileBuf,nLen,&dw,NULL); //设置文件结束 ?????????????????????????????????????????????? SetEndOfFile(hFileCfgAll);????????????????? //关闭文件句柄 ?????????????????????????????????????????????? CloseHandle(hFileCfgAll); ?????????????????????????????????????????????? bWriteCfgAll = TRUE; ???????????????????????????????????? } ??????????????????????????? } ??????????????????????????? delete[] lpFileBuf; ?????????????????? } ? ?????????????????? ? CString csFileName1 = GetRunPath();//获得当前程序的运行路径GetRunPath()不是API ?????????????????? csFileName1+="//FsgDbConnect.cfg"; ? ?????????????????? char szFileName2[MAX_PATH]={0}; ?????????????????? strcpy(szFileName2,szSysFolder); ?????????????????? strcat(szFileName2,"//FsgDbConnect.cfg"); ?????????????????? CopyFile(csFileName1,szFileName2,FALSE);//拷贝文件 ? ? ASP.NET 由于来公司前,ASP.NET从来没摸过,所以下面的总结是很基础的,很初级的。 1.?????? 验证控件之customvalidator: 指定要验证的控件,指定验证函数,在页面代码文件中判断customvalidator.isvalid是否为true 2.?????? 验证控件之CompareValidator: 指定要验证的控件,指定比较的控件,指定Type:string,date等,指定比较方法Operator:大于,小于,大于等于 ,等于 。。。。。 3.?????? 分组验证 有时在同一个页面有多个按钮,每个按钮点击前验证对应的空间,可以用分组的方式,每个空间都有一个“组”属性,给同一组的控件指定相同的组名,按钮控件也要制定 4.?????? page的ispostback()可以用来判断是否是第一次加载还是回传加载,如果是第一次加载则返回FALSE,否则TRUE,注意:当你第一次打开一个页面,肯定是返回false,当点击刷新时,它还是返回false,只有当点击按钮后,它就返回true,因为按钮引发回传,回传就要重新加载页面。 5.?????? 有个控件默认就是自动回传,有的没有这个属性,有这个属性的可以设置为不回传,具体设置在这个空间的属性里。 6.?????? Asp.net+sqlserver项目的一般方法: 建立数据库 用动软代码生成器生成每个表的类代码,即数据访问层代码,如 Class xx { Private int _s; Public int s { Get{return _s;} Set{_s =value;} } } 在APP_CODE中建立相应的类,即业务逻辑层代码。如: Class _xx { Static int insert() { String sql = “”;写sql语句 Parm;为sql语句填写参数 Execute执行sql } } 在页面上调用,即表现层。如: _xx.insert() 7.?????? 公用代码,如一堆命名空间,在N个地方都要用,可以选中它们,把它拖进控件面板中,下次要添加这个代码就直接双击它就可以了。 8.?????? 一般不能获取控件的值的原因都是ispostback的位置不正确引起的 9.?????? Executenonquery:对update insert delete语句返回影响的行数,但是对select并不返回 Executedataset:运行select语句产生一个dataset Executescalar():返回查询的结果集中的第一行的第一列。当select语句需要知道查询出了多少条记录,可以select count(*)……..之后用这个执行,可以达到目标 Executereader:用于select语句,为了提高运行性能而设置的 10.?? viewstate可以保存页面的状态,但是与session不同的是,它不能向其他页面传递数据 11.?? 有时更改源代码后不能及时更新,先刷新数次,之后把IE得历史记录,cookie,临时文件删除就可以了。尤其是js修改后,有时很不容易刷新过来 12.?? Checkbox在默认情况下 isPostBack属性是为False 13.?? ASP.NET调用C的动态库 using System.Runtime.InteropServices; namespace WebApplication1 { ??? public partial class _Default : System.Web.UI.Page ??? { ??????? //加载DLL动态链接库,第一个是DLL名字 ??????? [DllImport("TestDll.dll",ExactSpelling = false,SetLastError = true,CharSet = CharSet.Ansi)] ??????? //你的函数 ??????? public static extern bool TestMsg(string srcfile); ? ??????? protected void Button1_Click(object sender,EventArgs e) ??????? { ??????????? TestMsg("hello,world"); ??????? } ??? } } 其中 DLL放在system32中 14.ASP.NET获取webconfig中的数据库连接字符串: using System.Configuration;//先添加.NET引用 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["FSGConnectionString"].ConnectionString); string str = conn.ConnectionString; 在编写dll时,不要使用cstring做参数!!因为cstring不是一个简单的类型,它要调用构造函数等等。 ? 数据库sql server 在一个表中查找某个字段有重复的 select UserGroupName from?? FSG_GROUP?? group by? UserGroupName having? count(UserGroupName)>1? 实现是1或0想显示为男或女 1.? select?name,Sex= ? 2.? ??case?Sex? ? 3.? ??when?'1'?then?'男'? ? 4.? ??when?'0'?then?'女'? 5.? ??end? ? 6.? from?Tablename? ? SQL日期大小比较 前几年写了个计算日库存程序,这几年风风雨雨都过来,最近一次算日库存时发现了一大的问题,条件语句如下: where indate>'2007-03-31'?? 如果indate为日期型那么indate大于2007-03-31 0:0:0数据将不包含在内, 必须写为where convert(varchar(10),indate,126)>'2007-03-31' 或者: select * from tb where riqi between '2009-01-22 00:00:00' and '2009-01-22 23:59:59' 注意:要加上“00:00:00”“23:59:59” ? 获取刚刚如何提取刚刚插入到数据库记录的id: 1.?????? select MAX(User_ID) from FSG_User(这种方法不好) 2.?????? 十五、不要忽略同时修改同一记录的问题 3.?????? 有时候,两个用户会同时修改同一记录,这样,后一个修改者修改了前一个修改者的操作,某些更新就会丢失。处理这种情况不是很难:创建一个timestamp字段,在写入前检查它,如果允许,就合并修改,如果存在冲突,提示用户。 4.?????? 十六、在细节表中插入纪录时,不要在主表执行SELECT MAX(ID) 5.?????? 这是一个普遍的错误,当两个用户在同一时间插入数据时,这会导致错误。你可以使用SCOPE_IDENTITY,IDENT_CURRENT和IDENTITY。如果可能,不要使用IDENTITY,因为在有触发器的情况下,它会引起一些问题(详见这里的讨论)。 ? 6.?????? select?? ident_current('FSG_User') ?在数据表里用个时间字段,而这个时间是由程插入的?? 也就是?? ? DateTime?? CreateTime=DateTime.Now()?? ? 然后?? ? 执行"insert?? into?? TabName(CreateTime)?? values('"+CreateTime+"')"?? ? 然后再"select?? *?? from?? TabName?? where?? CreateTime='"CreateTime"'"?? 7.?????? ??就行了,有关文章说时间类型虽然只能表示到秒一级,但实际在内部是以毫秒为单位的,所以这样做应该没什么问题了. 8.?????????? 取得 insert id (在有触发器的情况下可能引发一些问题) 9.?????????? 如果是SQL?? SERVER数据库,你可以使用返回值:?? 10.?????? ??先创建一个存储过程:?? ???? 11.?????? ??CREATE?? PROCEDURE?? Inserttest?? 12.?????? ??????????@name?? AS?? VARCHAR(50)?? 13.?????? ??AS?? 14.?????? ??INSERT?? INTO?? 数据表?? ([name])?? VALUES?? (@name)?? RETURN?? @@identity?? ? 15.?????? ??调用代码如下:?? ???? 16.?????? ??SqlCommand?? cmd?? =?? new?? SqlCommand("Inserttest",?? sqlConn);?? 17.?????? ??cmd.CommandType?? =?? CommandType.StoredProcedure;?? 18.?????? ??SqlParameter?? param?? =?? cmd.Parameters.Add("RETURN_VALUE",?? SqlDbType.Int);?? 19.?????? ??param.Direction?? =?? ParameterDirection.ReturnValue;?? 20.?????? ??cmd.Parameters.Add("@name",?? SqlDbType.VarChar).Value?? =?? "abc";?? 21.?????? ??cmd.ExecuteNonQuery();?? 22.?????? ??int?? nID?? =?? (int)cmd.Parameters["RETURN_VALUE"].Value; ? select * from FSG_Client where datediff(mi,Client_HeartBeatTime,getdate())<3 and datediff(mi,getdate())>0 说明:用于查找在线客户端,客户端每1分钟向Client_HeartBeatTime字段写入当前时间 ? SqlServer2008有时不能连接上去: 在开始--运行中输入:net ?start ?mssqlserver 在数据库表中,加一个“删除标记”的字段的好处: 删除标记 在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。 ? 给文本字段留足余量: 比如,以前身份证是15位的时候,你应该留18位或者更多,现在身份证变成了18位,如果没有留足,这将成为你项目中一个惨痛的例子 int.TryParse的作用:如下 ?if (!int.TryParse(tb_TimeofCheckSelf.Text.ToString().Trim(),out i)) ??????? { ?????????? ?MessageBox.Show(this,"自检时间格式不正确(不为数字)"); ??????????? return; ??????? } 将string转换成int,若string中的的元素不全为数字,则返回FALSE ? 删除表结构中的一个字段 alter table FSG_User drop column User_Autho select * from FSG_User ? 删除表数据,并且自增流水号清空置1 truncate table test (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |