您的位置:首页 > 其它

[导入]Access里使用存储过程及用户自己定义的控件里使用参数

2005-10-13 23:16 447 查看
1、Access里使用存储过程。

  这可能是一个很有意思的内容,我所以这样做,是因为明确的知道自己做的项目会以SQLServer上实现,而在测试及开发的时候,还只能用Access,这或许是一个矛盾,但我还是把数据层与逻辑尽可能的分开了,也实现了数据可以快速转化的一些方法。但我还是想用SQLserver的存储过程,于是在Access里做了这样的方法来代替。

先在Access的查询里建立一个查询,因为我们可以使用任何的SQL语句在这个查询里,所以也就可以使用一些数据库操作命令了,然后保存。在ASP.net里这样来引用它:

//t_video_SumVideos: "select count(v_id),sum(v_size) from t_video where v_clientID=?";
if(OpenConn())
{
m_command = new OleDbCommand();

m_command.CommandType = CommandType.StoredProcedure;
 m_command.CommandText = "t_video_SumVideos";
m_command.Parameters.Add("@int_clientID",m_clientID);
OleDbDataReader m_reader;
m_reader = m_command.ExecuteReader();
if(m_reader.Read())
{
m_ExistsVideos = m_reader.GetInt32(0);
m_ExistsSize = m_reader.GetInt64(1);
}
m_reader.Close();
}

因为参数名只能用?(书上这样说的,没有试过其它的变量名)所以,我们必须自己小心的修理变量的传递顺序。对于数值与字符串,使用的时候都没有问题,日期时间变量得用一个ToString()来转化一下,不过还好,都能使用。
m_command.Parameters.Add("@int_clientID",m_clientID);
这里的“@int_clientID”没有什么用,自己定义的,但为了方便的转到SQLServer上,还我是准备了一下。

2、在自己定义的控件里使用参数:

有这样的一个例子:HeaderTitle.ascx
<script runat= “server“>
public PageTitle as stirng =”Title”
</Script>
<title><%=PageTitle%></title>

这一个简化的控件,里面用了一个参数(VB.net语法,我没有试过)。而且在自己引用空上控件的时候:
<%@Register TagePerfix=“Company“ TagName=“Header“ Src=“HeaderTitle.ascx“%>
<Company:Header
ID=“someID“
PageTitle=“NewTitle“ runat=“server“>

我在第一次看这个例子的时候觉得很有意思,不仅可以像ASP那样使用包含文件,而且还可以使用参数。然而问题是:它没有使用CodeBehind技术,而且这本质上也没有把代码也逻辑分开,里面还是与HTML混用,而更多的是,如果我有很多的参数想要从数据库里取得,而且给控件加一些自己的事件,都将变得很麻烦(在没有使用CodeBehind技术的时候)。

于是我这样想办法:

//自己的控件:
namespace WAVE
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Webb.WAVE.Controls;
using Microsoft.Web.UI.WebControls;

/// <summary>
/// Summary description for inc_ClientDetialInfo.
/// </summary>
public class inc_ClientDetialInfo : System.Web.UI.UserControl
{
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}

public void LoadClientData(int m_clientID)
{
//从数据库取得数据
m_client = new ClientAccount();
m_client.LoadClientData(m_clientID);
Label1.Text = m_client.m_address;
}
}

而在引用它的地方这样加载它,这样一来不仅解决了大量数据做为参数的问题,还可以让控件独立动作(上面省略了)。
//这一个在DataGrid里选择了某一个数据后,通过ID在到数据库里查询更详细的内容,然后动态的加载到页面的一个Panel上.
private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)
{

int m_clientID = Convert.ToInt32(DataGrid1.DataKeys[DataGrid1.SelectedIndex]);//取得ID
c_clientDetailPanel.Visible = true;//显示Panel
c_dynamicDetialPanel.Visible = true;//
m_cilentDetia = (inc_ClientDetialInfo)this.LoadControl("inc_ClientDetialInfo.ascx");//动态加载控件m_clientData在前面已经申明,inc_ClientDetialInfo是自己定义的一个控件类名.
m_cilentDetia.LoadClientData(m_clientID);//调用自己控件的方法,让它自己从数据库里加载信息
c_dynamicDetialPanel.Controls.Add(m_cilentDetia);//在页面上显示自己加载的详细信息
}

OK,这样一来解决了我的很多麻烦的问题,方便快捷的使用方法。

文章来源:http://computer.mblogger.cn/wucountry/posts/47849.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐