简介: 

从Microsoft Enterprise Library 5.0 Data Blocks剥离出的数据库操作方法,重新用C++/clr语言封装的一个模块!

只实现几个简单常用的接口,用于c++/clr项目中。

 

 

写在代码前面:

项目是c++/clr的,所以他只需要c++/clr的代码,他不需要我提供dll方式的功能模块,他只需要.h和.cpp文件;

不想说了,其他事情还是放在心里吧,直接贴代码就好了!

 

 

 项目结构:

C++/CLR写的Data Blocks

 

 实现的接口:


C++/CLR写的Data Blocks 

代码片段:

public ref class DataBase
    {
    
public:
        DataBase(String 
^connectionString,DbProviderFactory ^dbProviderFactory)
        {
            
if(String::IsNullOrEmpty(connectionString))
                
throw gcnew ArgumentException("连接字符串不允许为空");
            
if (dbProviderFactory == nullptr) 
                
throw gcnew ArgumentNullException("数据库提供类型不允许为空");
            
this->m_connectionString=connectionString;
            
this->m_dbProviderFactory=dbProviderFactory;
        }
        
//连接字符串
        property String ^ConnectionString
        {
            String 
^get(){return m_connectionString;}
        }

        
virtual int ExecuteNonQuery(DbCommand ^command);
        
virtual int ExecuteNonQuery(CommandType commandType,String ^commandText);
        
virtual Object ^ExecuteScalar(DbCommand ^command);
        
virtual Object ^ExecuteScalar(CommandType commandType,String ^commandText);
        
virtual DataSet ^ExecuteDataSet(DbCommand ^command);
        
virtual DataSet ^ExecuteDataSet(CommandType commandType,String ^commandText);
        
virtual IDataReader ^ExecuteReader(DbCommand ^command);
        
virtual IDataReader ^ExecuteReader(CommandType commandType,String ^commandText);
        
enum class UpdateBehavior
        {
            
/// <summary>
            
/// No interference with the DataAdapter's Update command. If Update encounters
            
/// an error, the update stops.  Additional rows in the Datatable are uneffected.
            
/// </summary>
            Standard,
            
/// <summary>
            
/// If the DataAdapter's Update command encounters an error, the update will
            
/// continue. The Update command will try to update the remaining rows. 
            
/// </summary>
            Continue,
            
/// <summary>
            
/// If the DataAdapter encounters an error, all updated rows will be rolled back.
            
/// </summary>
            Transactional  
        };
    
private:
         String 
^m_connectionString;
         DbProviderFactory 
^m_dbProviderFactory;

         DbConnection 
^GetNewOpenConnection();
         DbCommand 
^CreateCommandByCommandType(CommandType commandType,String ^commandText);
    
protected:
        
virtual DatabaseConnectionWrapper ^GetWrappedConnection();
        
static void PrepareCommand(DbCommand ^command,DbConnection ^connection);
        
int DoExecuteNonQuery(DbCommand ^command);
        Object 
^DoExecuteScalar(IDbCommand ^command);
        IDataReader 
^DoExecuteReader(DbCommand ^command,CommandBehavior cmdBehavior);
        
void DoLoadDataSet(DbCommand ^command,DataSet ^dataSet,array<String^> ^tableNames);
        DbDataAdapter 
^GetDataAdapter(UpdateBehavior updateBehavior);
        
virtual void SetUpRowUpdatedEvent(DbDataAdapter ^adapter) { }

    };

相关文章:

  • 2022-12-23
  • 2021-08-06
  • 2022-01-07
  • 2022-12-23
  • 2022-02-23
  • 2021-08-17
  • 2022-12-23
  • 2021-08-15
猜你喜欢
  • 2021-09-09
  • 2022-02-13
  • 2022-12-23
  • 2021-07-07
  • 2021-06-23
  • 2021-07-05
  • 2022-12-23
相关资源
相似解决方案