asp.net 如何在后台访问链接?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net 如何在后台访问链接?相关的知识,希望对你有一定的参考价值。
参考技术A 后台要想访问前端控件,必须要有 runat="server"否则需要提交表单才能获取到 参考技术B Response.Redirect("http://www.baidu.com");
Server.Transfer("http://www.baidu.com")追问
不是跳转页面, 而是只访问这个url,因为这个url是返回的json数据的。
追答能不能说清楚点
如何在 ASP.Net 中创建必须是通用的数据访问层?
【中文标题】如何在 ASP.Net 中创建必须是通用的数据访问层?【英文标题】:How to Create a Data Access Layer in ASP.Net which must be generic? 【发布时间】:2013-01-07 15:46:48 【问题描述】:我查看了几个站点 CodeProject、CSharpCorner、MSDN、CSharpPearls 等,包括一个 *** 链接:-
how to create single Data Access Layer to access two different data source in asp.net
但我对答案不满意。
我想在 ASP.net C# 中为我的网站创建一个 DAL,我在其中使用 Web.Config 来获取 ConnectionString。但事情是假设今天我连接到 SQLSERVER,我的 DAL 能够连接到 SQLSERVER。但是假设将来我再添加一个连接字符串,现在用一个连接字符串连接到 SQLSERVER,用另一个连接字符串连接到 MYSQL,我的 DAL 必须能够毫无问题地连接到所有类型的数据库。
到目前为止,我所做的是用于 SQLServer,它适用于 SQLServer,但我希望它是通用的,适用于 OLEDB、MYSQL、SQLCLIENT、(BIGTABLE & CASANDRA IF POSSIBLE)和所有其他提供商。
这是我到目前为止所尝试的:-
namespace MyDAL
namespace DB
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
/// <summary>
/// BaseDataManager is used to connect to database
/// </summary>
[Serializable()]
public class BaseDataManager : IDisposable
private bool _disposedValue = false;
private SqlConnection _connectionObject = null;
private SqlCommand _commandObject = null;
public BaseDataManager()
/// <summary>
/// Provide ConnectionString
/// </summary>
public BaseDataManager(string connectionString)
this.SqlConnectionString = connectionString;
/// <summary>
/// if config is true provide connectionstring name in Web.config
/// else if config is false provide connectionstring rather than providing
///name
/// </summary>
public BaseDataManager(String connectionString_Name, Boolean config)
if (config == true)
this.SqlConnectionString = ConfigurationManager.ConnectionStrings[connectionString_Name].ConnectionString;
else if (config == false)
this.SqlConnectionString = connectionString_Name;
else
Console.Out.WriteLine("Error in Connection String, Check Web.Config ");
/// <summary>
/// Provide data source=; as connection string, username and password of
/// database
/// </summary>
public BaseDataManager(string DataSource, string InitialCatalog, bool IntegratedSecurity)
if (IntegratedSecurity == true)
this.SqlConnectionString += "Data Source=" + DataSource + "InitialCatalog=" + InitialCatalog + ";Integrated Security=" + IntegratedSecurity;
/// <summary>
/// Provide data source=; as connection string, username and password of
/// database
/// </summary>
public BaseDataManager(string DataSource,string InitialCatalog, string username, string password)
this.SqlConnectionString += "Data Source="+DataSource+"InitialCatalog="+InitialCatalog+";User ID=" + username + ";Password=" + password;
public string SqlConnectionString
get;
set;
public virtual SqlConnection connection
get
if (_connectionObject == null && !String.IsNullOrEmpty (this.SqlConnectionString))
_connectionObject = new SqlConnection (this.SqlConnectionString);
return _connectionObject;
set
_connectionObject = value;
public virtual SqlCommand command
get
if (_commandObject == null)
_commandObject = new SqlCommand();
return _commandObject;
set
_commandObject = value;
public SqlConnection getOpenConnection()
if (connection.State == ConnectionState.Closed)
connection.Open();
return connection;
public SqlCommand getCommand()
return command;
protected virtual void Dispose(bool disposing)
if (!_disposedValue)
if (disposing)
//-------------------------------------------------------------------------
// Close the connection object prior to setting it to nothing
//----------------------------------------------------------------------
if (_connectionObject != null)
_connectionObject.Close();
_connectionObject.Dispose();
if (_commandObject != null)
_commandObject.Cancel();
_commandObject.Dispose();
_disposedValue = true;
public void Dispose()
Dispose(true);
GC.SuppressFinalize(this);
GC.Collect();
~BaseDataManager()
Dispose(false);
请帮帮我..
【问题讨论】:
Raj 您提供的链接中的答案告诉您需要做什么The key is to make sure that your other code, uses an interface, not an implementation, to access your DAL.
您的问题似乎是什么......?
@DJKRAZE 我已经为服务类而不是 BaseDataManager 创建了接口。我的接口是:-namespace MyDAL namespace DB using System; using System.Data.SqlClient; public interface DAO int I_U_D_Data(String query); SqlDataReader read_Data(String query);
如何使用实体框架,它可以与许多不同的数据库一起使用。
@JohnSaunders 不,我不能使用实体框架,因为我的大三学生不知道它。我只需要使用带有 DAL 的 ADO.NET
仅供参考,EF 是“ADO.NET 实体框架”。此外,它已经发布了四年或更长时间 - 可能是您的晚辈才过时两年。
【参考方案1】:
我所看到的工作是在每个实体的基础上提供数据访问对象 (DAO),而不是一个巨大的 DAO。
我会保持它非常简单,不要做太多抽象。假设您正在申请关于学校的申请。一些实体:
学校 老师 学生然后你可以为每个DAO制作接口:
ISschoolDAO ITeacherDAO 学生道每个 DAO 都有特定于您的应用程序的功能。我不建议尝试使其通用。您可能对学校有这样的方法:
公共列表 GetSchools() 公立学校GetSchool(int id)然后,当您为 DAO 实现接口时,它可以是您想要的任何技术。请记住,BigTable/Hadoop/SQL 之类的东西不符合相同的概念。一个是关系数据库,另一个不是关系数据库。
在整个代码中使用这些接口,然后您就可以编写单元测试并轻松更换底层技术。
(值得重复...不要尝试将 SQL 语句作为接口的一部分读取。请记住,这些语句在不同技术之间的映射是不同的。)
【讨论】:
但我想为我的整个网络制作一个主要的 DAL 以进行连接。此外,您所说的可以扩展我的 DAL,以便为特定工作创建特定功能。但事实上,我们也需要编写所有内容以在 db 上执行,所以我想以这样一种方式实现,即我的后辈只需创建我的函数的引用,而无需担心连接或与之相关的对象。然后他们将创建一个集合,将所有内容放回 UI。而且我认为它不能制造。事实上,我已经做了一半,将在几日后发布。谢谢nywaz 我不确定我是否完全理解您的回复,但原帖有两个大要求:1) 用于抽象数据库的数据访问层 2) 能够换入/换出不同技术。您意识到,当您编写一个接受 SQL 连接字符串的函数时,您执行 (2) 的能力受到限制。如果您想要一个能够仅替换 MySQL、SQL Server、Oracle 等数据库的 DAL,那么您最初的建议可能会奏效。 仍然在我原来的帖子中它缺乏通用行为,我不能直接使用任何其他数据库。所以至少建议我一个通用代码以上是关于asp.net 如何在后台访问链接?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.Net Core MVC 中使用 HTML 链接?