个人工作总结

经常逛CSDN,总是获取,今天看见别人把工作总结写了出来,我也想写一下,虽然可能有错误、很肤浅、很杂、但我还是要写一下。

离开学校半年了,在一小公司打工,属于有什么活做什么事的那种。

 

C++/MFC

由于MFC做的程序很丑(VS2005及以下),可能有多种界面解决方案。大公司有自己的图形库,或者买市面上的图形库。但是还有一个方案值得一提,虽然我做的不好,就是CDHtmlDialog类,据说windows XP的控制面板(分类视图)是用的这种方案,还有诺顿的也采用了这种。当然,现在vs2008 sp1就比较好了。

 

API:

         GetSystemDirectory(szSysFolder,MAX_PATH);获得系统目录:一般为c:/windows/system32

If0 < 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);// cstempCstring类型

基于对话框的应用程序中:

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:

指定要验证的控件,指定比较的控件,指定Typestringdate等,指定比较方法Operator:大于,小于,大于等于 ,等于 。。。。。

3.       分组验证

有时在同一个页面有多个按钮,每个按钮点击前验证对应的空间,可以用分组的方式,每个空间都有一个“组”属性,给同一组的控件指定相同的组名,按钮控件也要制定

4.       pageispostback()可以用来判断是否是第一次加载还是回传加载,如果是第一次加载则返回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 

实现是10显示为男或女

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_IDENTITYIDENT_CURRENTIDENTITY。如果可能,不要使用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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...