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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值