经常逛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*
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. 有个控件默认就是自动回传,有的没有这个属性,有这个属性的可以设置为不回传,具体设置在这个空间的属性里。
建立数据库
Class xx
{
Private int _s;
Public int s
{
Get{return _s;}
Set{_s =value;}
}
}
在APP_CODE中建立相应的类,即业务逻辑层代码。如:
Class _xx
{
Static int insert()
{
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
{
[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不是一个简单的类型,它要调用构造函数等等。
在一个表中查找某个字段有重复的
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”
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 (在有触发器的情况下可能引发一些问题)
10. 先创建一个存储过程:
11. CREATE PROCEDURE Inserttest
12. @name AS VARCHAR(50)
13. AS
14. INSERT INTO 数据表 ([name]) VALUES (@name) RETURN @@identity
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