博客日历
2024年11月 | ||||||
一 | 二 | 三 | 四 | 五 | 六 | 七 |
28 | 29 | 30 | 31 | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 1 |
存档
2024年03月 04月 05月 2021年
01月 02月 11月 12月 2020年
02月 03月 04月 05月 06月 07月
09月 2018年
09月 2017年
01月 02月 07月 2016年
01月 04月 07月 08月 11月 12月
2015年
01月 02月 03月 05月 09月 10月
11月 2014年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2013年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2012年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2011年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2010年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2009年
03月 04月 05月 06月 07月 08月
09月 10月 11月 12月
自动生成ADO连接字符串的方法
在任意目录新建一个.udl文件,双击打开“数据链接属性”对话框,设置完成并单击[确定]之后,打开此.udl文件,即可得连接字符串。如果是Access等文件型数据库,.udl文件会被存储到数据库文件目录下。
可以使用如下批处理自动建立.udl文件并打开“数据链接属性”对话框:
@echo off fsutil file createnew ConnectionString.udl 0 > NUL Rundll32.exe "C:\Program Files\Common Files\System\OLE DB\oledb32.dll", OpenDSLFile ConnectionString.udl
也可以使用C++编程调用“数据链接属性”对话框:
#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename("EOF", "rsEOF") #import "C:\Program Files\Common Files\System\OLE DB\oledb32.dll" int test() { CoInitialize(NULL); //_COM_SMARTPTR_TYPEDEF(IDataSourceLocator, __uuidof(IDataSourceLocator)); //typedef _com_ptr_t<_com_IIID<IDataSourceLocator, // &__uuidof(IDataSourceLocator)> > IDataSourceLocatorPtr; MSDASC::IDataSourceLocatorPtr ptrDataSourceLocator; HRESULT hr = ptrDataSourceLocator.CreateInstance(__uuidof(MSDASC::DataLinks)); if (FAILED(hr)) { printf("Create IDataSourceLocator failure:0x%08X\n",hr); return -1; } //_COM_SMARTPTR_TYPEDEF(_Connection, __uuidof(_Connection)); //typedef _com_ptr_t<_com_IIID<_Connection, // &__uuidof(_Connection)> > _ConnectionPtr; ADODB::_ConnectionPtr ptrConn=ptrDataSourceLocator->PromptNew(); if (ptrConn!=NULL) { _bstr_t bstr_ConnectionString=ptrConn->ConnectionString; char* lpConnectionString=bstr_ConnectionString; //得到连接字符串 cout<<lpConnectionString<<endl; ptrConn.Release(); ptrConn=NULL; } ptrDataSourceLocator.Release(); ptrDataSourceLocator=NULL; CoUninitialize(); return 0; }
关于ADO的一点问题
在Win7 SP1下编译的程序,放在XP,2003等系统上无法运行,提示“无效指针”的解决方法1:
#import "C:\Program Files\Common Files\System\ado\msado15.dll"
//修改为
#import "C:\Program Files\Common Files\System\ado\msado28.tlb"
方法2:
直接复制XP的msado15.dll过来。
分类:Win32/C++ 查看次数:12706 发布时间:2013/2/5 14:17:44
.Net程序的崩溃日志与自动重启
static void Main(String[] args) { if (!Directory.Exists(Application.StartupPath + "\\Log")) { Directory.CreateDirectory(Application.StartupPath + "\\Log"); } //全局异常处理 Application.ThreadException+= new ThreadExceptionEventHandler(Application_ThreadException); Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); AppDomain.CurrentDomain.UnhandledException+= new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); //... }
static void ProcessCrash(Exception e) { String path = Application.StartupPath + "\\Log\\test1.exe_" + DateTime.Now.ToString("yyyy_MM_dd_HHmmss") + ".log"; StreamWriter sw = File.CreateText(path); sw.WriteLine("test1.exe崩溃日志:"); sw.WriteLine("-----------------------------------------------"); sw.WriteLine("[ Error: ]" + e.GetType().ToString()); sw.WriteLine("[ Message: ]" + e.Message); sw.WriteLine("[ Source: ]" + e.Source); sw.WriteLine("[ StackTrace: ]----------------------------\r\n" + e.StackTrace); sw.Flush(); sw.Close(); Application.Restart(); Environment.Exit(0); } static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) { Exception exp = e.Exception; MainClass.ProcessCrash(exp); } static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Exception exp = (Exception)e.ExceptionObject; MainClass.ProcessCrash(exp); }
分类:Win32/C++ 查看次数:6699 发布时间:2013/2/3 22:14:25