65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 XML 和辅助类自动化查询执行

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.60/5 (2投票s)

2006年6月26日

3分钟阅读

viewsIcon

17519

该通用类具有返回 dataset 和 datareader 对象的静态函数,它接受一个字符串(存储查询的 xml 标签名称)和一个值,以在查询接受参数时提供。

引言

用于存储查询和存储过程的 XML 文件。下面的 XML 文件有两个主要标签:SqlQueryStoredProc

您可以将查询与标签名关联,并将所需的查询存储在 Query 属性中。如果查询有任何参数,则创建相同数量的子节点,并在子标签的 Parameter 属性和 DataType 属性中指定 ParameterName 和 sqldatatype。

(注意:此 xml 文件是为使用 sqlclient 提供程序并以 sqlserver 2000 为目标的查询创建的,如果使用的提供程序是 oledb,则查询可以使用“?”而不是显式指定参数名后跟 @)

 

 

 

 

<pre>

<?xml version="1.0" encoding="utf-8"?>

<查询>

<SqlQuery>

<LoginClient 查询="select chrid,chrname from yourtable where UserName=@UserName and pwd =@Password">

<LoginClientParam 参数="@UserName" DataType="SqlDbType.VarChar">

</LoginClientParam>

<LoginClientParam 参数="@Password" DataType="SqlDbType.VarChar">

</LoginClientParam>

</LoginClient>

<LoginSubscriber 查询="select chrid,chrname from yourtable where UserName=@UserName and pwd =@Password">

<LoginSubscriberParam 参数="@UserName" DataType="SqlDbType.VarChar">

</LoginSubscriberParam>

<LoginSubscriberParam 参数="@Password" DataType="SqlDbType.VarChar">

</LoginSubscriberParam>

</LoginSubscriber>

<LoginRM 查询="Select usr_id from yourtable where  Usr_Name = @UserName and pwd =@Password">

<LoginRMParam 参数="@UserName" DataType="SqlDbType.VarChar">

</LoginRMParam>

<LoginRMParam 参数="@Password" DataType="SqlDbType.VarChar">

</LoginRMParam>

</LoginRM>

<LoginBackUser 查询="abc">

</LoginBackUser>

<TradeRegStockNameData 查询="select distinct chrDesc,chrDesc as chrDesc2 from yourtable where bitdelete=0">

</TradeRegStockNameData>

</SqlQuery>

<StoredProc>

<TradeReg 查询="YourStoredProcedure">

<TradeRegParam 参数="@mSub_Ac_id" DataType="SqlDbType.Char" DataLen="10">

</TradeRegParam>

<TradeRegParam 参数="@mClient_id" DataType="SqlDbType.Char" DataLen="10">

</TradeRegParam>

<TradeRegParam 参数="@mSettType" DataType="SqlDbType.Char" DataLen="255">

</TradeRegParam>

<TradeRegParam 参数="@mFromDate" DataType="SqlDbType.Char" DataLen="10">

</TradeRegParam>

<TradeRegParam 参数="@mToDate" DataType="SqlDbType.Char" DataLen="10">

</TradeRegParam>

<TradeRegParam 参数="@mSettFromDate" DataType="SqlDbType.Char" DataLen="10">

</TradeRegParam>

<TradeRegParam 参数="@mSettToDate" DataType="SqlDbType.Char" DataLen="10">

</TradeRegParam>

<TradeRegParam 参数="@mStockName" DataType="SqlDbType.Char" DataLen="255">

</TradeRegParam>

<TradeRegParam 参数="@mTradeType" DataType="SqlDbType.Char" DataLen="1">

</TradeRegParam>

<TradeRegParam 参数="@mBuySell" DataType="SqlDbType.Char" DataLen="1">

</TradeRegParam>

<TradeRegParam 参数="@mUser_Ac_id" DataType="SqlDbType.Char" DataLen="10">

</TradeRegParam>

<TradeRegParam 参数="@UsrType" DataType="SqlDbType.Int">

</TradeRegParam>

</TradeReg>

</StoredProc>

</查询>

</pre>

 

使用 XML 文件的支持类

<pre>

usingSystem;

usingSystem.Data;

usingSystem.Data.SqlClient;

usingSystem.Configuration;

usingSystem.Collections;

usingSystem.Drawing;

usingSystem.Xml;

usingSystem.Web; 

命名空间kmukWebFII

{

/// <summary>

///FetchDataSqlClient 的摘要描述。

/// </summary>

public FetchDataSqlClient

{

public static 字符串GetFastMultipleParamTrial(字符串xmlTagName,params 字符串[] val)

{

XmlDocument _xdoc =newXmlDocument();

_xdoc.Load( HttpContext.Current.Server.MapPath("KmukQueries.xml"));

XmlNodeList xtemp = _xdoc.GetElementsByTagName(xmlTagName);

SqlConnection dbconn =newSqlConnection(ConfigurationSettings.AppSettings["Kmukconn2"]);

//string sqlCommand = xtemp[0].Attributes["Query"].Value;

SqlCommand dbcmd =newSqlCommand();

dbcmd.Connection = dbconn;

dbcmd.CommandText = xtemp[0].Attributes["Query"].Value;

// 如果代码中存在参数,则将执行此段代码

if(val[0]!="null")

{

inticount = 0;

foreach(XmlNode xnodtempinxtemp[0].ChildNodes )

{

字符串paramname = xnodtemp.Attributes["Parameter"].Value;

字符串paramtype = xnodtemp.Attributes["DataType"].Value;

dbcmd.Parameters.Add(paramname,paramtype);

dbcmd.Parameters[paramname].Value = val[icount];

icount++;

}

}

SqlDataReader rset=null;

boolerrorocc =true;

try

{

dbconn.Open();

rset = dbcmd.ExecuteReader();

}

catch(Exception e)

{

e.ToString();

errorocc =false;

}

finally

{

dbconn.Close();

}

// catch(SqlException se)

// {

// //if(rset!="")

// // dbconn.Close();

//

// if(NUM_TRIES<MAX_TRIES)

// {

// rset = dbcmd.ExecuteScalar().ToString();

// NUM_TRIES+=1;

// }

// else

// throw se;

//

// }

if(errorocc!=false)

returnrset;

else

return "-1";

}

</pre>

 

 

代码中的使用示例

 

假设我们使用这个静态类返回一个 datareader 对象。

//aspx 页面的代码隐藏

datareader drtemp;

drtemp =FetchDataSqlClient.GetFastSingleParamTrial("LoginClient",dbconn,txtusernamec.Text,txtpasswordc.Text);

 

上述函数的签名(“string xmlTagName”, oledbconnection 对象, 参数)

 

这是我为 Code Project 做的第一次贡献。

希望很快能带着改进的功能和代码回来。

 

 

© . All rights reserved.