我创建了一个连接类,并与register.aspx一起使用没有任何问题。当我尝试将代码从register.aspx.cs移动到regpartial.cs然后我收到冲突错误:"连接conn = new connection();"
我想将代码register.aspx.cs移动到mypartial.cs。我认为会更好,但我不确定如何解决冲突问题。
Register.aspx.cs(最终)
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using test.App_Code;
namespace test
{
public partial class register: System.Web.UI.Page
{
private void Page_Load(object sender, EventArgs e)
{
}
Connection.cs(最后尝试)
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
namespace test.App_Code
{
public class connection
{
public SqlConnection connect()
{
SqlConnection conn= new SqlConnection("Data Source=******;Initial Catalog=****;Integrated Security=False;User Id=****;Password=*****;MultipleActiveResultSets=True");
baglanti.Open();
return (conn);
}
}
regpartial.cs(最后尝试)
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace test.App_Code.partials
{
connection conn = new connection();
public partial class regpartial : register
{
}
}
答案 0 :(得分:1)
通常,您的aspx.cs
文件中不应包含太多代码。
您希望直接将您的视图/表示逻辑(使.aspx
页面工作的东西)的逻辑与业务逻辑(排序,转换,验证)分开,最后您希望获得数据访问/资源访问被隔离。
我还建议在原始ADO.NET/SqlConnection上使用Dapper.NET。
我将把一个非常基本的例子串联起来,告诉你如何分开它。这不能保证编译c#代码,但它会非常接近伪代码。
在registration.aspx.cs里面
private void btnRegister_Click(object sender, EventArgs e)
{
var email = txtEmail.Text;
var password = txtPassword.Text;
var registration = new Registration { Email = email, Password = password }
var bizService = new RegistrationService();
var response = bizService.Register(registration);
if(response.Success) Response.Redirect("~/registration/success");
ltlError.Text = response.FailureMessage;
}
RegistrationService.cs
public class RegistrationService {
public RegistrationResponse Register(Registration req)
{
var regDAL = new RegistrationAccess();
var isEmailDuplicated = regDal.DoesEmailExist(req.Email)
if(isEmailDuplicated)
return new RegistrationResponse {
Success = false,
FailureMessage = "Email exists, did you mean to login instead?
}
regDAL.InsertNewRegistration(req)
return new RegistrationResponse { Success = true };
}
}
最后,你应该有一个RegistrationAccess.cs,它只包含用于读写SQL Server /其他数据库/文件系统的代码。
注意aspx.cs文件如何不了解RegistrationAccess。您的视图不应该直接调用数据库。另外需要注意的是RegistrationService不了解视图。它接收注册类型,然后执行业务逻辑并调用DAL。 DAL类对视图和RegistrationService都没有任何了解,它只知道一件事,即数据库。
这是一个非常简单的ASP.NET webforms解决方案的基础。一个更好的解决方案是使用MVP / MVVM模式和依赖倒置原则,但如果你不理解基本的关注点分离,那么这些原则并不值得使用。