求救:两个很菜的问题,郁闷了两天。。。。

xiaohyy 2002-10-21 11:30:08
我采用code-behind,代码如下:(a.asp.cs)
public class ProductOut : System.Web.UI.Page
{
...
protected String strConnect;
protected System.Data.OleDb.OleDbConnection objConnect;
...
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
// 问题1:strConnect本来是希望从ascx中得到
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
MapPath("DB\\TMEDB.mdb");
objConnect = new OleDbConnection(strConnect);
}
....
public void delete(Object o,ImageClickEventArgs e)
{
try
{
objConnect.Open(); //问题2:这里产生异常:connectString为null
}
catch(Exception objError)
{
Response.Write(objError.Message);
}
}

}
问题1:
strConnect本来是希望从一个用户控件得到的。我的用户控件(a.ascx文件)如下:
<%@Control Language="c#" ClassName="c"%>
<script language="c#" runat="server">
public String JetConnectionString
{
get
{
return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
MapPath("DB\\TMEDB.mdb");
}
}
</script>
我在a.aspx文件的头部添加了<%@ Reference Control="a.ascx"%>
如果我在a.aspx.cs使用
Control c1=LoadControl("a.ascx");
this.Controls.Add(c1);
strConnect = (c)c1.OLEDBConnectionString;
会编译出错:c未声明。可是在ascx中我已经说明了编译成类c啊,
<%@Control Language="c#" ClassName="c"%>
我的ascx未采用code-behind,而aspx采用了code-behind,
在a.asp.cs中如何访问ascx中的属性呢?

问题2:
其中delete是我点击一个button产生的事件处理函数,可是当我点击该button时
产生一个异常:connectString为null,我已经在页面首次加载时new了一个objConnect,
为什么objConnect.connectString还为空呢?如果我不判断if(!Page.IsPostBack),就
不会有这个异常,可是这样每次回送都会new一个OleDbConnection对象,这样导致资源
浪费,这种情况下我应该怎么做呢?
...全文
59 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
uno 2002-10-21
  • 打赏
  • 举报
回复
写一个基类
把获取配置都写进去
窗体都从这个基类派生

看看微软的例子
xiaohyy 2002-10-21
  • 打赏
  • 举报
回复
我也知道是回传问题,但是我把strConnect声明为static也不行啊。。
yohomonkey 2002-10-21
  • 打赏
  • 举报
回复
你应该再次声明c,才可以使用。
dreamdragon2008 2002-10-21
  • 打赏
  • 举报
回复
1、通过一个用户控件去取联接字符串,真是不值得,放到Web.config中不是更好吗?a.aspx引用用户控件的语法是<%@ Register Srca.ascx" %>
2、点击一个button时回传了页面,但变量strConnect的值并没有回传,肯定为Null了。其实大可不必去判断了,这么短的字符串倒没什么,非要判断,你就得自己回传这个变量的值了,一个好一点的方法是Cache,这么写代码
private string _strConnect
{
get {return Cache["ConnectString"].ToString();}
set {Cache["ConnectString"] = value;}
}
public string strConnect;

其他代码不变。
cyflamingo 2002-10-21
  • 打赏
  • 举报
回复
我同意写基类的方法
微软用的是common.data.configration.connectionstring

一个基类做出来,一般常用的东东都可以放进去的
spring_ok 2002-10-21
  • 打赏
  • 举报
回复
第一个问题:不应该这样保存connection string.应该用web.config文件或一个公共类来存这些东东。
spring_ok 2002-10-21
  • 打赏
  • 举报
回复
objConnect = new OleDbConnection(strConnect);
这一句不要放在 !IsPostBack中。
!IsPostBack 是用来初始化那些本身具有ViewState的控件对象的,比如DataGrid,TextBox等。

objConnect是一个对象,不是control,也没有被显示地加入到viewState 中,所以必须在每次 postback时重新初始化。不然就会出你碰到的错误。
angel_lee 2002-10-21
  • 打赏
  • 举报
回复
gz

62,046

社区成员

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

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

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

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