c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)

2023-11-17

首先定义数据库操作的标准接口IDBAccess,定义接口的基本功能;

通过基本的接口设置,完成数据访问的统一抽象。

public interface IDBAccess
    
...{
        
void Init(string strServer, string strDataBase, string strUser, string strPwd);
        
void Open();
        
void Close();
        
bool TestConn();
        
int RunNoQuery(string strCmd);
        DataTable RunQuery(
string strCmd);
        DBType DBType 
...get;}
        
int GetFiledMax(string strTable, string strField);
        DataTable Tables 
...get; }
        DataTable GetColumns();
        DataTable GetColumns(
string strTable);
    }

使用静态工厂模式,通过传入枚举型参数 ,动态创建访问实例

实现模式上采用基本实现接口,派生类继承基类的虚函数,从而实现代码的耦合较低,有很好的扩展性。

public enum DBType
    
...{
        Access,
        SQL,
        DB2,
        Oracle,
        MySQL
    }


 
public static class DBAccessFactory
    
...{
        
public static IDBAccess Create(DBType type)
        
...{
            IDBAccess IRet 
= null;
            
switch (type)
            
...{
                
case DBType.Access:
                    IRet 
= new Access(type);
                    
break;

                
case DBType.SQL:
                    IRet 
= new SQL(type);
                    
break;

                
default:
                    
break;
            }

            
return IRet;
        }


        
private abstract class DBAccess : IDBAccess
        
...{
            
protected DbConnection m_oConn = null;
            
protected const string CON_strServer = "Server";
            
protected const string CON_strDataBase = "Data Source";
            
protected const string CON_strUser = "UID";
            
protected const string CON_strPwd = "PWD";
            
protected const string CON_strConnTimeOut = "Connect Timeout = 2";
            
private DBType m_eDBType = DBType.Access;

            
protected DBAccess(DBType type)
            
...{
                
this.m_eDBType = type;
            }


            
public DBType DBType
            
...{
                
get ...return this.m_eDBType; }
            }


            
public void Init(string strServer, string strDataBase, string strUser, string strPwd)
            
...{
                
this.InitConn(strServer, strDataBase, strUser, strPwd);
            }


            
public void Open()
            
...{
                
if (this.m_oConn != null)
                
...{
                    
this.m_oConn.Open();
                }

            }


            
public int RunNoQuery(string strCmd)
            
...{
                
int iRet = 0;
                
try
                
...{
                    DbCommand oCmd 
= this.GetCmd(strCmd);
                    
if (oCmd != null)
                    
...{
                        iRet 
= oCmd.ExecuteNonQuery();
                    }

                }

                
catch (Exception ex)
                
...{
                    
throw (new Exception(ex.Message));
                }

                
return iRet;
            }


            
public int GetFiledMax(string strTable, string strField)
            
...{
                
int iRet = -1;
                DataTable dt 
= this.RunQuery("Select Max(" + strField + ") From " + strTable);
                
if (dt != null && dt.Rows.Count == 1)
                
...{
                    iRet 
= dt.Rows[0][0is DBNull ? 0 : Convert.ToInt32(dt.Rows[0][0]);
                }

                
return iRet;
            }


            
public DataTable RunQuery(string strCmd)
            
...{
                DataTable dt 
= new DataTable();
                DbDataAdapter adp 
= this.DbAdp;
                adp.SelectCommand 
= this.GetCmd(strCmd);
                adp.Fill(dt);
                
return dt;
            }


            
public void Close()
            
...{
                
if (this.m_oConn != null && this.m_oConn.State == System.Data.ConnectionState.Open)
                
...{
                    
this.m_oConn.Close();
                }

            }


            
public bool TestConn()
            
...{
                
bool bRet = true;
                
try
                
...{
                    
if (this.m_oConn.State != System.Data.ConnectionState.Open)
                    
...{
                        
this.m_oConn.Open();
                    }

                    bRet 
= this.m_oConn.State == System.Data.ConnectionState.Open;
                }

                
catch
                
...{
                    bRet 
= false;
                }

                
this.Close();
                
return bRet;
            }


            
public abstract DataTable Tables ...get; }
            
public abstract DataTable GetColumns();
            
public abstract DataTable GetColumns(string strTable);

            
protected abstract void InitConn(string strServer, string strDataBase, string strUser, string strPwd);
            
protected abstract DbCommand GetCmd(string strCmd);
            
protected abstract DbDataAdapter DbAdp ...get;}
        }

   }

各派生类的具体实现,此时只要实现DBAccess的各个虚函数即可。

private class Access : DBAccess
        
...{
            
public Access(DBType type)
                : 
base(type)
            
...{
            }


            
protected override void InitConn(string strServer, string strDataBase, string strUser, string strPwd)
            
...{
                
string strConn = "Provider = ";
                
switch (strDataBase.Substring(strDataBase.LastIndexOf('.'+ 1).ToLower())
                
...{
                    
case "mdb":     // 2000, 2003
                        strConn += "Microsoft.Jet.OleDb.4.0;";
                        
break;

                    
case "accdb":   // 2007
                        strConn += "Microsoft.ACE.OLEDB.12.0;";
                        
break;

                    
default:
                        
throw (new Exception("Unknown Access Version."));
                    
//break;
                }

                strConn 
+= CON_strDataBase + " = " + strDataBase;
                
//strConn += CON_strUser + " = " + strUser;
                
//strConn += CON_strPwd + " = " + strPwd;
                base.m_oConn = new OleDbConnection(strConn);
            }


            
protected override DbCommand GetCmd(string strCmd)
            
...{
                
return new OleDbCommand(strCmd, (OleDbConnection)base.m_oConn);
            }


            
protected override DbDataAdapter DbAdp
            
...{
                
get ...return new OleDbDataAdapter(); }
            }


            
public override DataTable Tables
            
...{
                
get
                
...{
                    
return ((OleDbConnection)base.m_oConn).GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] ...nullnullnull"Table" });
                }

            }


            
public override DataTable GetColumns()
            
...{
                DataTable dt 
= new DataTable();
                
foreach (DataRow row in this.Tables.Rows)
                
...{
                    dt.Merge(
this.GetColumns(row["TABLE_NAME"].ToString()));
                }

                
return dt;
            }


            
public override DataTable GetColumns(string strTable)
            
...{
                
return ((OleDbConnection)base.m_oConn).GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] ...nullnull, strTable, null });
            }

        }


        
private class SQL : DBAccess
        
...{
            
public SQL(DBType type)
                : 
base(type)
            
...{
            }


            
protected override void InitConn(string strServer, string strDataBase, string strUser, string strPwd)
            
...{
                
string strConn = CON_strServer + " = " + strServer + ";";
                strConn 
+= CON_strDataBase + " = " + strDataBase + ";";
                strConn 
+= CON_strUser + " = " + strUser + ";";
                strConn 
+= CON_strPwd + " = " + strPwd + ";";
                strConn 
+= CON_strConnTimeOut;
                
base.m_oConn = new SqlConnection(strConn);
            }


            
protected override DbCommand GetCmd(string strCmd)
            
...{
                
return new SqlCommand(strCmd, (SqlConnection)base.m_oConn);
            }


            
protected override DbDataAdapter DbAdp
            
...{
                
get ...return new SqlDataAdapter(); }
            }


            
public override DataTable Tables
            
...{
                
get ...return ((SqlConnection)base.m_oConn).GetSchema("Tables"null); }
            }


            
public override DataTable GetColumns()
            
...{
                
return ((SqlConnection)base.m_oConn).GetSchema("Columns"null);
            }


            
public override DataTable GetColumns(string strTable)
            
...{
                
return ((SqlConnection)base.m_oConn).GetSchema("Columns"new string[] ...nullnull, strTable, null });
            }

        }

 

整个例子的完整代码如下,VS2008下编译测试通过,本人已通过它实现N个项目,欢迎大家评测,谢谢指教

public enum DBType
    
...{
        Access,
        SQL,
        DB2,
        Oracle,
        MySQL
    }


    
public interface IDBAccess
    
...{
        
void Init(string strServer, string strDataBase, string strUser, string strPwd);
        
void Open();
        
void Close();
        
bool TestConn();
        
int RunNoQuery(string strCmd);
        DataTable RunQuery(
string strCmd);
        DBType DBType 
...get;}
        
int GetFiledMax(string strTable, string strField);
        DataTable Tables 
...get; }
        DataTable GetColumns();
        DataTable GetColumns(
string strTable);
    }


    
public static class DBAccessFactory
    
...{
        
public static IDBAccess Create(DBType type)
        
...{
            IDBAccess IRet 
= null;
            
switch (type)
            
...{
                
case DBType.Access:
                    IRet 
= new Access(type);
                    
break;

                
case DBType.SQL:
                    IRet 
= new SQL(type);
                    
break;

                
default:
                    
break;
            }

            
return IRet;
        }


        
private abstract class DBAccess : IDBAccess
        
...{
            
protected DbConnection m_oConn = null;
            
protected const string CON_strServer = "Server";
            
protected const string CON_strDataBase = "Data Source";
            
protected const string CON_strUser = "UID";
            
protected const string CON_strPwd = "PWD";
            
protected const string CON_strConnTimeOut = "Connect Timeout = 2";
            
private DBType m_eDBType = DBType.Access;

            
protected DBAccess(DBType type)
            
...{
                
this.m_eDBType = type;
            }


            
public DBType DBType
            
...{
                
get ...return this.m_eDBType; }
            }


            
public void Init(string strServer, string strDataBase, string strUser, string strPwd)
            
...{
                
this.InitConn(strServer, strDataBase, strUser, strPwd);
            }


            
public void Open()
            
...{
                
if (this.m_oConn != null)
                
...{
                    
this.m_oConn.Open();
                }

            }


            
public int RunNoQuery(string strCmd)
            
...{
                
int iRet = 0;
                
try
                
...{
                    DbCommand oCmd 
= this.GetCmd(strCmd);
                    
if (oCmd != null)
                    
...{
                        iRet 
= oCmd.ExecuteNonQuery();
                    }

                }

                
catch (Exception ex)
                
...{
                    
throw (new Exception(ex.Message));
                }

                
return iRet;
            }


            
public int GetFiledMax(string strTable, string strField)
            
...{
                
int iRet = -1;
                DataTable dt 
= this.RunQuery("Select Max(" + strField + ") From " + strTable);
                
if (dt != null && dt.Rows.Count == 1)
                
...{
                    iRet 
= dt.Rows[0][0is DBNull ? 0 : Convert.ToInt32(dt.Rows[0][0]);
                }

                
return iRet;
            }


            
public DataTable RunQuery(string strCmd)
            
...{
                DataTable dt 
= new DataTable();
                DbDataAdapter adp 
= this.DbAdp;
                adp.SelectCommand 
= this.GetCmd(strCmd);
                adp.Fill(dt);
                
return dt;
            }


            
public void Close()
            
...{
                
if (this.m_oConn != null && this.m_oConn.State == System.Data.ConnectionState.Open)
                
...{
                    
this.m_oConn.Close();
                }

            }


            
public bool TestConn()
            
...{
                
bool bRet = true;
                
try
                
...{
                    
if (this.m_oConn.State != System.Data.ConnectionState.Open)
                    
...{
                        
this.m_oConn.Open();
                    }

                    bRet 
= this.m_oConn.State == System.Data.ConnectionState.Open;
                }

                
catch
                
...{
                    bRet 
= false;
                }

                
this.Close();
                
return bRet;
            }


            
public abstract DataTable Tables ...get; }
            
public abstract DataTable GetColumns();
            
public abstract DataTable GetColumns(string strTable);

            
protected abstract void InitConn(string strServer, string strDataBase, string strUser, string strPwd);
            
protected abstract DbCommand GetCmd(string strCmd);
            
protected abstract DbDataAdapter DbAdp ...get;}
        }


        
Access, SQL#region Access, SQL

        
private class Access : DBAccess
        
...{
            
public Access(DBType type)
                : 
base(type)
            
...{
            }


            
protected override void InitConn(string strServer, string strDataBase, string strUser, string strPwd)
            
...{
                
string strConn = "Provider = ";
                
switch (strDataBase.Substring(strDataBase.LastIndexOf('.'+ 1).ToLower())
                
...{
                    
case "mdb":     // 2000, 2003
                        strConn += "Microsoft.Jet.OleDb.4.0;";
                        
break;

                    
case "accdb":   // 2007
                        strConn += "Microsoft.ACE.OLEDB.12.0;";
                        
break;

                    
default:
                        
throw (new Exception("Unknown Access Version."));
                    
//break;
                }

                strConn 
+= CON_strDataBase + " = " + strDataBase;
                
//strConn += CON_strUser + " = " + strUser;
                
//strConn += CON_strPwd + " = " + strPwd;
                base.m_oConn = new OleDbConnection(strConn);
            }


            
protected override DbCommand GetCmd(string strCmd)
            
...{
                
return new OleDbCommand(strCmd, (OleDbConnection)base.m_oConn);
            }


            
protected override DbDataAdapter DbAdp
            
...{
                
get ...return new OleDbDataAdapter(); }
            }


            
public override DataTable Tables
            
...{
                
get
                
...{
                    
return ((OleDbConnection)base.m_oConn).GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] ...nullnullnull"Table" });
                }

            }


            
public override DataTable GetColumns()
            
...{
                DataTable dt 
= new DataTable();
                
foreach (DataRow row in this.Tables.Rows)
                
...{
                    dt.Merge(
this.GetColumns(row["TABLE_NAME"].ToString()));
                }

                
return dt;
            }


            
public override DataTable GetColumns(string strTable)
            
...{
                
return ((OleDbConnection)base.m_oConn).GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] ...nullnull, strTable, null });
            }

        }


        
private class SQL : DBAccess
        
...{
            
public SQL(DBType type)
                : 
base(type)
            
...{
            }


            
protected override void InitConn(string strServer, string strDataBase, string strUser, string strPwd)
            
...{
                
string strConn = CON_strServer + " = " + strServer + ";";
                strConn 
+= CON_strDataBase + " = " + strDataBase + ";";
                strConn 
+= CON_strUser + " = " + strUser + ";";
                strConn 
+= CON_strPwd + " = " + strPwd + ";";
                strConn 
+= CON_strConnTimeOut;
                
base.m_oConn = new SqlConnection(strConn);
            }


            
protected override DbCommand GetCmd(string strCmd)
            
...{
                
return new SqlCommand(strCmd, (SqlConnection)base.m_oConn);
            }


            
protected override DbDataAdapter DbAdp
            
...{
                
get ...return new SqlDataAdapter(); }
            }


            
public override DataTable Tables
            
...{
                
get ...return ((SqlConnection)base.m_oConn).GetSchema("Tables"null); }
            }


            
public override DataTable GetColumns()
            
...{
                
return ((SqlConnection)base.m_oConn).GetSchema("Columns"null);
            }


            
public override DataTable GetColumns(string strTable)
            
...{
                
return ((SqlConnection)base.m_oConn).GetSchema("Columns"new string[] ...nullnull, strTable, null });
            }

        }


        
#endregion

    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL) 的相关文章

  • codecvt 不是 std 标头吗?

    此代码使用 Visual C 11 进行编译 并在 Windows 7 上按预期运行 但无法使用 Windows 7 上的 MinGW 4 7 0 或 Linux 上的 gcc 4 8 0 进行编译 编译用 std c 11 flag in
  • 使用模型优先方法时如何播种数据?

    所以我正在学习MVC3和EF4 我尝试了代码优先方法 但它对我来说太混乱了 我可以毫无问题地创建类 但最困难的部分是处理外键和彼此之间的关系 但我首先选择了模型 这样我就可以直观地设计它并查看关系在哪里 创建模型后 它会为我创建一个 SQL
  • 在 C# 中将“set”添加到接口的属性中

    我希望通过为该接口中的属性提供设置访问器来 扩展 该接口 界面看起来像这样 interface IUser string UserName get 我想要这样的东西 interface IMutableUser IUser string U
  • 将一个文件写入.c中的另一个文件

    我有一个读取文件然后将其内容复制到另一个文件的代码 我需要使其仅复制每 20 个符号 然后跳过 10 个符号 然后再次跳过 20 个符号 依此类推 我必须使用 lseek 函数 但我不知道如何将所有这些放入循环中来执行此操作 main ar
  • 尝试使用指向 ODBC DSN 的连接字符串时出现关键字不支持异常

    我为我的 Asp Net MVC 应用程序的数据库访问创建了一个 ODBC DSN 主要原因之一是它可以轻松地将数据库凭据 例如服务器地址 端口 用户名和密码 置于源代码控制之外 而不会妨碍我的发布能力 所以我将连接更改为DSN MyDSN
  • OpenGL 着色器不与着色器程序链接

    我正在尝试使用 GLFW GLEW 添加着色器 我收到一个错误 指出着色器已加载 但它们没有有效的对象代码 这是我用于加载着色器的代码 class SHADER public void LoadShaders const char vert
  • 有没有办法找到哪些 .NET 类实现了某个接口?

    例如 如果我想查看我的 NET 选项用于实现 IList 或 IDictionary 有没有办法找到它 例如在 MSDN 文档中 我认为可以使用反射器 http www red gate com products reflector
  • 如何在 TargetFrameworks 标记中每个框架运行一次的目标之前创建仅运行一次而不是一次的 MSBuild 目标?

    我有一个我部分拥有的代码生成器工具 现在 csproj 文件可以在其中列出多个目标框架并构建所有这些框架 我试图弄清楚如何使 MSBuild 目标仅在每个目标中生成一次代码无论列出了多少个目标框架 都将运行构建 并让每个目标框架的编译等待代
  • 如何使用可变参数模板声明 std::tuple?

    也许我在这里很天真 但我相信以下代码应该编译 template
  • 从命名管道读取

    我必须实现一个 打印服务器 我有 1 个客户端文件和 1 个服务器文件 include
  • Fluent NHibernate 一对一映射

    我很难利用 Fluent NHibernate 的 HasOne 映射 基本上 A 类在 B 类中可以有匹配的 只有一条或没有 记录 请帮助定义关系的 AMap 和 BMap 类 谢谢 public class A public virtu
  • 为什么(错误地)使用 ref myarray[0] 传递数组可以工作,但仅在 32 位应用程序中有效?

    我在一些互操作中做了一些愚蠢的事情 使用DllImport 在某一时刻 但它仍然可以在 32 位机器上运行 在 64 位应用程序上做了哪些不同的操作 以及为什么 导致方法 1 的行为不同 方法一 错误的方法 ref byte param S
  • OpenGL 中连续暂停

    void keyPress unsigned char key int x int y int i switch key case f i 3 while i x pos 3 sleep 100 glutPostRedisplay 上面是在
  • Qt 信号槽,新符号中的转换类型[重复]

    这个问题在这里已经有答案了 鉴于以下两个 connect ui gt comboBox SIGNAL activated QString ps SLOT requestPlotsAvailable QString connect ui gt
  • ThemeInfo 属性有什么用?

    每当我创建新的 WPF 应用程序或 WPF 用户控件库时 AssemblyInfo cs文件包含以下属性 assembly ThemeInfo ResourceDictionaryLocation None where theme spec
  • 函数的动态返回类型

    如何创建一个具有基于参数类型的动态返回类型的函数 Like protected DynamicType Test DynamicType type return 为此 您必须使用泛型 例如 protected T Test
  • 如何检查单元格是否为空 (Excel\VisualC#)

    我的目标是逐行检查Sheet1为了发现有多少行 所以我放了一个 do while 一旦到达空白单元格就应该停止 Example 第 1 行数据第2行数据第3行数据第4行数据第5行数据 第 6 行数据第7行数据 在本例中 我只需要前 5 行
  • 执行按钮单击时使 wpf UI 响应

    在我的 wpf c 应用程序中 当用户按下按钮时会执行一个很长的过程 当按下按钮直到执行完整的代码时 窗口将冻结 用户无法在窗口中执行任何其他任务 如何使按钮单击代码作为后台进程 以便窗口响应用户 我尝试过以下方法 但没有成功 privat
  • 升压参数库

    最近我发现参数 http www boost org doc libs 1 50 0 libs parameter doc html index htmlBoost 中的库 老实说 我不明白为什么这是 Boost 的一部分 当需要向函数传递
  • 如何将谓词作为参数传递#

    如何将谓词传递到方法中 但在没有传递谓词的情况下仍使其工作 我想也许是这样的 但似乎并不正确 private bool NoFilter return true private List

随机推荐

  • LVGL 获取光标坐标位置

    为了方便获取物理按键输入的坐标 在仿真时直接开启打印坐标显示 获取自己想要的坐标 核心代码主要接口 indev proc press 打印光标位置 注意要先使能打印开关 LV LOG WARN pressed at x d y d proc
  • HTTP:断点续传原理图文分析

    起源 以前 用户不能使用现在这种高速的带宽访问互联网 当时 下载一个尺寸稍大的图片或文件就已经很吃力了 如果下载过程中遇到网络中断的情况 那就必须重头开始 一 获取部分内容 在HTTP 1 1中 为了解决上述问题 需要一种可恢复的机制 所谓
  • C++ Web服务器 - 用户登录(三)

    newobj跨平台开发框架 https github com Liuccysdgg newobj 本片着重介绍 MYSQL连接池 HTTP静态文件响应 部分JS等 效果演示 一 MYSQL连接池 如果每次业务请求进来时去创建mysql连接并
  • Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime问题解决

    Node Sass does not yet support your current environment Windows 64 bit with Unsupported runtime问题解决 运行原先vue程序时 npm run d
  • Typescript、VUE3的相关介绍

    一 Typescript 1 TypeScript 的由来 TypeScript 是由微软开发的一款开源的编程语言 TypeScript 是 Javascript 的超集 遵循最新的 ES6 ES5 规范 TypeScript 扩展了 Ja
  • 动态规划问题——最长上升子序列(LIS)(一)

    原文转载自我的博客benym cn 推荐链接 动态规划问题 最长上升子序列 LIS 二 动态规划问题 最长上升子序列 LIS 三 如 求 2 7 1 5 6 4 3 8 9 的最长上升子序列 我们定义d i i 1 n 来表示前i个数以A
  • chatgpt赋能Python-python2_7如何安装

    Python 2 7如何安装 Python 2 7是一个广泛使用的Python版本 其可以在Windows和Linux上安装 本文将介绍Python 2 7如何安装 并提供相关步骤和指南 下载Python 2 7 首先 您需要下载Pytho
  • Python for循环嵌套

    视频版教程 Python3零基础7天入门实战视频教程 在有复杂应用的时候 我们可以通过for循环的嵌套来实现 比如打印二维的行列 这里先学习下range 方法 获取一个数字序列 案例 range stop 返回0到stop 1的数字序列 f
  • SQL 通配符

    在 SQL 中 通配符与 SQL LIKE 操作符一起使用 SQL 通配符用于搜索表中的数据 在 SQL 中 可使用以下通配符 通配符 描述 替代 0 个或多个字符 替代一个字符 charlist 字符列中的任何单一字符 charlist
  • Angular项目配置本地https访问

    Angular项目配置本地https访问 首先 先创建一个项目 d work learn ng new angular https 然后cd到刚生成的项目的根目录 建立一个cert目录 用于存放我们的密钥证书等文件 cd angular h
  • 转载---贪心算法

    转载博主 1 贪心算法简介 1 1 基本定义 在贪婪算法 greedy method 中 我们要逐步构造一个最优解 每一步 我们都在一定的标准下 做出一个最优决策 做出决策所依据的标准称为贪心准则 greedy criterion 贪心算法
  • python语法-类型注解

    python语法 类型注解 类型注解 在代码中涉及数据交互的地方 提供数据类型的注解 显式说明 主要功能 帮助第三方IDE工具 如pycharm 对代码进行类型推断 协助做代码提示 帮助开发者自身对变量进行类型注释 支持 变量的类型注解 函
  • 如何安装wsl以及安装时遇到的一些问题

    首先我安装wsl是参考这篇文章 Windows安装WSL详解 讲得挺具体 如果安装过程一切顺利就可以跳过下面的内容了 wsl在终端安装遇到的问题 当我在终端输入wsl install 返回了一列数据 但显然不是安装成功 于是我输入wsl i
  • document onload和window onload的区别?

    答 Document onload 是在结构和样式加载完成才执行的JS Window onload 不仅仅要在结构和样式加载完 还要执行完所有的样式 图片这些资源文件 完全加载完才会触发Window onload事件
  • Oracle SQL查询之Like使用正则表达式

    select from si0001 temp a where regexp like a xm a z A Z 查询xm字段带有英文的数据
  • 2019年第十届蓝桥杯国赛B组试题G-排列数-next_permutation枚举,模拟

    在一个排列中 一个折点是指排列中的一个元素 它同时小于两边的元素 或者同时大于两边的元素 对于一个 1 n 的排列 如果可以将这个排列中包含 t个折点 则它称为一个 t 1 单调序列 例如 排列 1 4 2 3 是一个 3 单调序列 其中
  • Mapreduce学习基础

    一 Mapreduce的基础 1 1 为什么要学习Mapreduce 1 单机资源受限 比如CPU 磁盘 2 分布式计算的程序的复杂度特别高 难度大 mapreduce就是解决以上问题的 1 利用集群的所有cpu 所有内存 所有磁盘 2 m
  • 【TCP/IP】第四章 IP协议

    4 1 即网际协议 TCP IP的心脏是互联网层 这一层主要是由IP Internet Protocol 和ICMP Internet Control Message Protocol 两个协议组成 IP相当于OSI参考模型的第3层 IP
  • 06-TensorFlow 自制数据集

    1 数据文件介绍 数据集下载 https download csdn net download qq 41865229 85254826 训练集60000张数字图片 测试集10000张图片 都是黑底白字的灰度图 每张图有28行28列个像素点
  • c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)

    首先定义数据库操作的标准接口IDBAccess 定义接口的基本功能 通过基本的接口设置 完成数据访问的统一抽象 public interface IDBAccess void Init string strServer string str