请问这个我的c ++新数据库创建代码有什么问题? [英] Please what is wrong with this my c++ new database creation code?

查看:48
本文介绍了请问这个我的c ++新数据库创建代码有什么问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

代码在尝试执行指示的行时抛出异常(至少从我的调试工作中看出来。实际上,我以前从未编写过并运行过数据库创建代码。我意识到我需要它并且我写了这个并且决定在修改之前测试它以成为完整的代码。



我使用的是Visual Studio 2010附带的Sql server ce 3.5



我在代码中包含的try子句生成了以下输出错误消息:

描述:多步OLE DB操作生成错误。检查每个OLE DB状态值,如果可用。没有工作完成。



消息:IDispatch错误$ 3105

(参见下面的catch子句)

The code throws an exception on attempting to execute the indicated line ( at least so it appears from my debugging effort.Actually, I have never written and run a database creation code before. I realise I needed it and I wrote this and decided to test it before modifying to become the full fledged code.

I am using Sql server ce 3.5 that came along with visual studio 2010

The try clause I included in the code generated the following output error messages:
Description: Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available.No work was done.

Message: IDispatch error $3105
(see catch clause below)

// Maga.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<Ole2.h>
#include<tchar.h>
#include<strsafe.h>
#import "C:\Program Files\Common Files\System\Ado\msado15.dll" no_namespace rename("EOF","EndOfFile")
void CreateNewDataBase(TCHAR *szConnString,TCHAR *szClassName,TCHAR *szNewPassword)
{
    //::CoInitializeEx(NULL,COINIT_MULTITHREADED);
    
    _ConnectionPtr Conn = NULL;
    _CommandPtr Cmd = NULL;
    
    try
    {
    	//Create an open connection
    	Conn.CreateInstance(__uuidof(Connection));
    
    	Conn->ConnectionString = _bstr_t(szConnString);
    	
//Exception thrown while trying to execute the open statement
    	Conn->Open(_bstr_t(L""),_bstr_t(L""),_bstr_t(L""),-1);
    
    	TCHAR szString[1000];
    	StringCbPrintf(szString,sizeof(szString),_T("CREATE DATABASE \"%s\" DATABASE PASSWORD '%s' COLLATE Latini_General_CI_AS"),szClassName,szNewPassword);
    	
    	//Create a new database
    	Cmd.CreateInstance(__uuidof(Command));
    	Cmd->ActiveConnection = Conn;
    	Cmd->CommandText = _bstr_t(szString); 
    	Cmd->Execute(NULL,NULL,adCmdText);
    
    	//Create SchInfo table
    	StringCbPrintf(szString,sizeof(szString),_T("%s %s"),
    	  _T("CREATE TABLE SchInfo (SchInfoID int NOT NULL, Name nvarchar(200) NOT NULL,Logo nvarchar(500),Street nvarchar (50) NOT NULL, Locality nvarchar(50) NOT NULL,"),
    	  _T("City nvarchar(50) NOT NULL, State nvarchar(50) NOT NULL, Country nvarchar(50) NOT NULL, EMail nvarchar(50), Phone nvarchar(20));"));
    	Cmd->CommandText = _bstr_t(szString);
    	Cmd->Execute(NULL,NULL,adCmdText);
    	//Create Primary Key
    	StringCbPrintf(szString,sizeof(szString),_T("%s"),
    		_T("ALTER TABLE SchInfo ADD (CONSTRAINT PK_SchInfo PRIMARY KEY (SchInfoID) AUTO INCREMENT);"));
    	Cmd->CommandText = _bstr_t(szString);				  
    	Cmd->Execute(NULL,NULL,adCmdText);
    		
    	Conn->Close();
    }
    catch(_com_error &e)
    {
    
    	_bstr_t Error = e.Description();
    	TCHAR *szDescription = (TCHAR *)Error;
    	const TCHAR * szError = e.ErrorMessage();
    	TCHAR szString[1000];
    	StringCbPrintf(szString,sizeof(szString),_T("Description : %s ; Message : %s"),szDescription,szError);
    	//IErrorInfo *IError = e.ErrorInfo();
    	MessageBox(NULL,szString,_T("Class Creation Error"),MB_OK);
    	if(Conn)
    	{
    		Conn->Close();
    	}
    	throw 2.0;
    }
}

//::CoUninitialize();
int _tmain(int argc, _TCHAR* argv[])
{
    ::CoInitializeEx(NULL,COINIT_MULTITHREADED);
    TCHAR szDataSource[] =_T("MyDatabase#1.sdf");
    TCHAR szPassword[] = _T("XXXXXXXXXXXXXXXX");
    TCHAR szClassName[] =_T("NewClass");
    TCHAR szNewPassword[] = _T("NewPassword");
    TCHAR szConnString[500];
    StringCbPrintf(szConnString,sizeof(szConnString),_T("Provider = 'Microsoft.SQLSERVER.CE.OLEDB.3.5'; Persist Security Info = 'FALSE'; Data Source = '%s'; Password = '%s'; File Mode = 'shared read'; Max Database Size = '4000'; Max Buffer Size = '1024'; "),szDataSource,szPassword);
    CreateNewDataBase(szConnString,szClassName,szNewPassword);
    ::CoUninitialize();
    MessageBox(NULL,_T("Succeded"),_T("Succeeded"),MB_OK);
    return 0;
}

推荐答案

3105

(参见下面的catch子句)

3105
(see catch clause below)
// Maga.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<Ole2.h>
#include<tchar.h>
#include<strsafe.h>
#import "C:\Program Files\Common Files\System\Ado\msado15.dll" no_namespace rename("EOF","EndOfFile")
void CreateNewDataBase(TCHAR *szConnString,TCHAR *szClassName,TCHAR *szNewPassword)
{
    //::CoInitializeEx(NULL,COINIT_MULTITHREADED);
    
    _ConnectionPtr Conn = NULL;
    _CommandPtr Cmd = NULL;
    
    try
    {
    	//Create an open connection
    	Conn.CreateInstance(__uuidof(Connection));
    
    	Conn->ConnectionString = _bstr_t(szConnString);
    	
//Exception thrown while trying to execute the open statement
    	Conn->Open(_bstr_t(L""),_bstr_t(L""),_bstr_t(L""),-1);
    
    	TCHAR szString[1000];
    	StringCbPrintf(szString,sizeof(szString),_T("CREATE DATABASE \"%s\" DATABASE PASSWORD '%s' COLLATE Latini_General_CI_AS"),szClassName,szNewPassword);
    	
    	//Create a new database
    	Cmd.CreateInstance(__uuidof(Command));
    	Cmd->ActiveConnection = Conn;
    	Cmd->CommandText = _bstr_t(szString); 
    	Cmd->Execute(NULL,NULL,adCmdText);
    
    	//Create SchInfo table
    	StringCbPrintf(szString,sizeof(szString),_T("%s %s"),
    	  _T("CREATE TABLE SchInfo (SchInfoID int NOT NULL, Name nvarchar(200) NOT NULL,Logo nvarchar(500),Street nvarchar (50) NOT NULL, Locality nvarchar(50) NOT NULL,"),
    	  _T("City nvarchar(50) NOT NULL, State nvarchar(50) NOT NULL, Country nvarchar(50) NOT NULL, EMail nvarchar(50), Phone nvarchar(20));"));
    	Cmd->CommandText = _bstr_t(szString);
    	Cmd->Execute(NULL,NULL,adCmdText);
    	//Create Primary Key
    	StringCbPrintf(szString,sizeof(szString),_T("%s"),
    		_T("ALTER TABLE SchInfo ADD (CONSTRAINT PK_SchInfo PRIMARY KEY (SchInfoID) AUTO INCREMENT);"));
    	Cmd->CommandText = _bstr_t(szString);				  
    	Cmd->Execute(NULL,NULL,adCmdText);
    		
    	Conn->Close();
    }
    catch(_com_error &e)
    {
    
    	_bstr_t Error = e.Description();
    	TCHAR *szDescription = (TCHAR *)Error;
    	const TCHAR * szError = e.ErrorMessage();
    	TCHAR szString[1000];
    	StringCbPrintf(szString,sizeof(szString),_T("Description : %s ; Message : %s"),szDescription,szError);
    	//IErrorInfo *IError = e.ErrorInfo();
    	MessageBox(NULL,szString,_T("Class Creation Error"),MB_OK);
    	if(Conn)
    	{
    		Conn->Close();
    	}
    	throw 2.0;
    }
}

//::CoUninitialize();
int _tmain(int argc, _TCHAR* argv[])
{
    ::CoInitializeEx(NULL,COINIT_MULTITHREADED);
    TCHAR szDataSource[] =_T("MyDatabase#1.sdf");
    TCHAR szPassword[] = _T("XXXXXXXXXXXXXXXX");
    TCHAR szClassName[] =_T("NewClass");
    TCHAR szNewPassword[] = _T("NewPassword");
    TCHAR szConnString[500];
    StringCbPrintf(szConnString,sizeof(szConnString),_T("Provider = 'Microsoft.SQLSERVER.CE.OLEDB.3.5'; Persist Security Info = 'FALSE'; Data Source = '%s'; Password = '%s'; File Mode = 'shared read'; Max Database Size = '4000'; Max Buffer Size = '1024'; "),szDataSource,szPassword);
    CreateNewDataBase(szConnString,szClassName,szNewPassword);
    ::CoUninitialize();
    MessageBox(NULL,_T("Succeded"),_T("Succeeded"),MB_OK);
    return 0;
}


这篇关于请问这个我的c ++新数据库创建代码有什么问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆