// 本程序提供了一个通过HTTP来操作数据库的类,这样少了本地安装乱七八糟的数据库驱动程序及复杂的设置, 
// Web 服务器可以是任意的类型的,可以为 ASP , ASP.NET JSP 或其他,本模块提供了服务器的ASP.NET 的 
// 例子 
// 南京千里独行原创 请引用时勿删除本行 2004-12-31 
using System; 
using System.Net ; 
namespace myConnection 
{ 
/// 
/// XMLHttp数据库连接操作事件处理委托 
/// 
/// 数据库连接对象 
/// 数据库命令对象 
/// 总的数据字节数 
/// 已完成的数据字节数 
public delegate void XMLHttpDBExecutingHandler( XMLHttpConnection conn , XMLHttpCommand cmd , long ContentLength , long ContentCompleted ); 
/// 
/// XMLHttp类型的数据库数据读取对象 
/// 
public class XMLHttpReader : System.Data.IDataReader 
{ 
private string[] strHead = null; 
private System.Collections.ArrayList myRows = new System.Collections.ArrayList(); 
private bool bolClosed = false; 
private int intRowIndex = 0 ; 
private const string c_NullFlag = "[NULL]" ; 
/// 
/// 根据字段名称获得字段序号,比较不区分大小写 
/// 
/// 字段名称 
/// 字段的从0开始的序号,若没找到则返回-1 
public int GetIndexByName( string strName ) 
{ 
if( strName == null ) return -1 ; 
strName = strName.ToUpper().Trim(); 
for( int iCount = 0 ; iCount < strHead.Length ; iCount ++ ) 
if( strName.Equals( strHead[iCount])) 
return iCount ; 
return -1 ; 
} 
/// 
/// 从一个数据库读取对象加载对象数据 
/// 
/// 数据库数据读取对象 
/// 加载的记录的行数 
public int FromReader(System.Data.IDataReader myReader) 
{ 
if( myReader != null) 
{ 
// 加载列头信息 
strHead = new string[ myReader.FieldCount ]; 
for( int iCount = 0 ; iCount < myReader.FieldCount ; iCount ++ ) 
strHead[iCount] = myReader.GetName(iCount).ToLower().Trim(); 
// 加载数据 
myRows.Clear(); 
intRowIndex = -1 ; 
while( myReader.Read()) 
{ 
string[] strValues = new string[ myReader.FieldCount]; 
myRows.Add( strValues ); 
for( int iCount = 0 ; iCount < myReader.FieldCount ;iCount ++ ) 
{ 
if( myReader.IsDBNull( iCount ) == false) 
{ 
if( myReader[iCount] is byte[]) 
{ 
strValues[iCount] = Convert.ToBase64String( (byte[])myReader[iCount]); 
} 
else 
strValues[iCount] = myReader[iCount].ToString(); 
} 
}// for 
}// while 
return myRows.Count ; 
}// if 
return -1; 
}// FromReader 
/// 
/// 保存对象数据到XML节点 
/// 
/// 根XML节点 
/// 保存的记录个数 
public int ToXML( System.XML.XMLElement RootElement ) 
{ 
System.XML.XMLElement RowElement = null; 
System.XML.XMLElement FieldElement = null; 
while( RootElement.FirstChild != null) 
RootElement.RemoveChild( RootElement.FirstChild); 
// 保存列数据 
if( strHead != null && strHead.Length > 0 ) 
{ 
for( int iCount = 0 ; iCount < strHead.Length ;iCount ++ ) 
{ 
RootElement.SetAttribute("f" + iCount.ToString() , strHead[iCount]); 
} 
RootElement.SetAttribute("fieldcount" , strHead.Length.ToString()); 
} 
查看本文来源