【C#】ADO.NET 实体数据模型 warning CS1591:

本文介绍了解决C#编译过程中出现的CS1591警告的方法,包括取消XML文档生成、调整警告级别及使用预处理指令来忽略特定警告。

问题描述 

1>E:\xxx\Models\wx_user.cs(23,30,23,35): warning CS1591: 缺少对公共可见类型或成员“wx_user.state”的 XML 注释
1>E:\xxx\Models\wx_user.cs(24,42,24,53): warning CS1591: 缺少对公共可见类型或成员“wx_user.create_time”的 XML 注释
1>E:\xxx\Models\wx_user.cs(25,23,25,33): warning CS1591: 缺少对公共可见类型或成员“wx_user.avatar_url”的 XML 注释
1>E:\xxx\Models\wx_user.cs(26,23,26,32): warning CS1591: 缺少对公共可见类型或成员“wx_user.unit_name”的 XML 注释
1>E:\xxx\Models\wx_user.cs(27,23,27,35): warning CS1591: 缺少对公共可见类型或成员“wx_user.access_token”的 XML 注释
1>E:\xxx\Models\wx_user.cs(28,23,28,36): warning CS1591: 缺少对公共可见类型或成员“wx_user.refresh_token”的 XML 注释
1>E:\xxx\Models\wx_user.cs(29,23,29,29): warning CS1591: 缺少对公共可见类型或成员“wx_user.ticket”的 XML 注释
1>E:\xxx\Models\wx_user.cs(30,23,30,42): warning CS1591: 缺少对公共可见类型或成员“wx_user.access_token_ticket”的 XML 注释
1>E:\xxx\Models\wx_user.cs(31,42,31,56): warning CS1591: 缺少对公共可见类型或成员“wx_user.validate_token”的 XML 注释

解决方案

一、去掉XML文档文件的勾选

二、取消指定的警告或者将警告级别调高

警告级别调成3  或 取消显示警告: 1591

 

三、对tt模板文件添加,警告过滤指令

对于ADO.NET 实体数据模型,只需要对模板文件(xxx.content.tt、xxx.tt)进行添加,保存即可。 

#pragma warning disable 1591 

1.1、Model1.content.tt

...
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
#pragma warning disable 1591
...

1.2、Model1.tt

...
    public string UsingDirectives(bool inHeader, bool includeCollections = true)
    {
        return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
            ? string.Format(
                CultureInfo.InvariantCulture,
                "{0}using System;{1}" +
                "{2}",
                inHeader ? Environment.NewLine : "",
                includeCollections ? (Environment.NewLine + "using System.Collections.Generic;" + Environment.NewLine + "#pragma warning disable 1591") : "",
                inHeader ? "" : Environment.NewLine)
            : "";
    }
...

 

<think>我们选择开发一个商务类网站,例如:企业客户关系管理系统(CRM)。网站主题:企业客户关系管理系统(CRM)功能模块:前台:用户(员工)注册、登录、查看客户信息、录入客户信息、查询客户信息、修改个人信息。后台:管理员账号管理(增删改查)、客户数据管理(增删改查)、数据分析(如客户分布统计)、内容管理(如公告发布)、系统设置(如角色权限)。开发环境:VisualStudio2019,ASP.NETWebForms,SQLServer数据库。步骤:1.需求分析:根据要求,我们需要实现前后台功能。2.系统设计:数据库设计,界面设计(使用母版页),功能模块划分。3.代码实现。4.测试与维护。数据库设计(示例):表1:用户表(Users)UserID(int,PK,自增)Username(nvarchar(50))Password(nvarchar(50))--实际应用中应存储哈希值Email(nvarchar(100))Role(nvarchar(20))--角色:普通用户、管理员CreateDate(datetime)表2:客户表(Customers)CustomerID(int,PK,自增)CustomerName(nvarchar(50))ContactPerson(nvarchar(50))--联系人Phone(nvarchar(20))Address(nvarchar(200))Industry(nvarchar(50))Size(int)--公司规模CreatedBy(int)--创建人(UserID)CreateDate(datetime)表3:公告表(Announcements)AnnouncementID(int,PK,自增)Title(nvarchar(100))Content(ntext)PublishDate(datetime)PublisherID(int)--发布人(UserID)注意:实际开发中密码存储应使用哈希和盐,这里为了简化使用明文(不推荐生产环境使用)。我们将使用母版页(MasterPage)来统一网站风格。代码实现:1.创建数据库和表(使用SQLServer)2.在VisualStudio中创建ASP.NETWebForms项目,配置数据库连接(Web.config中配置连接字符串)。3.创建母版页(Site.Master)和内容页。4.实现功能:-用户注册、登录-客户信息管理(增删改查)-公告管理(后台)-账号管理(后台)-数据分析(如:统计客户行业分布)由于代码量较大,我们将分模块给出关键代码。注意:以下代码为示例代码,可能需要根据实际情况调整。</think>### 基于ASP.NET的企业客户关系管理系统(CRM) 我将设计一个商务类网站——企业客户关系管理系统(CRM),包含完整的前后台功能模块。以下是详细实现方案: #### 数据库设计(SQL Server) ```sql CREATE DATABASE CompanyCRM; GO USE CompanyCRM; -- 用户表 CREATE TABLE Users ( UserID INT PRIMARY KEY IDENTITY, Username NVARCHAR(50) NOT NULL UNIQUE, Password NVARCHAR(100) NOT NULL, Email NVARCHAR(100) NOT NULL, Role NVARCHAR(20) CHECK (Role IN ('Admin', 'Sales', 'Customer')) DEFAULT 'Customer', RegistrationDate DATETIME DEFAULT GETDATE() ); -- 客户表 CREATE TABLE Clients ( ClientID INT PRIMARY KEY IDENTITY, ClientName NVARCHAR(100) NOT NULL, ContactPerson NVARCHAR(50), Phone NVARCHAR(20), Email NVARCHAR(100), Industry NVARCHAR(50), Status NVARCHAR(20) CHECK (Status IN ('Active', 'Inactive', 'Potential')) DEFAULT 'Potential', CreatedBy INT FOREIGN KEY REFERENCES Users(UserID), CreatedDate DATETIME DEFAULT GETDATE() ); -- 交互记录表 CREATE TABLE Interactions ( InteractionID INT PRIMARY KEY IDENTITY, ClientID INT FOREIGN KEY REFERENCES Clients(ClientID), InteractionType NVARCHAR(20) CHECK (InteractionType IN ('Meeting', 'Call', 'Email', 'Proposal')), Notes NTEXT, InteractionDate DATETIME DEFAULT GETDATE(), UserID INT FOREIGN KEY REFERENCES Users(UserID) ); -- 系统日志表 CREATE TABLE SystemLogs ( LogID INT PRIMARY KEY IDENTITY, UserID INT FOREIGN KEY REFERENCES Users(UserID), Action NVARCHAR(50), ActionDate DATETIME DEFAULT GETDATE(), Details NVARCHAR(MAX) ); ``` #### 母版页设计(Site.Master) ```html <%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="Site" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>企业CRM系统</title> <link href="Content/bootstrap.min.css" rel="stylesheet" /> <style> .navbar-brand { font-weight: bold; } .footer { background: #f8f9fa; padding: 20px; margin-top: 30px; } .main-content { min-height: 80vh; padding: 20px; } </style> </head> <body> <form id="form1" runat="server"> <!-- 导航栏 --> <nav class="navbar navbar-expand-lg navbar-dark bg-primary"> <div class="container"> <a class="navbar-brand" href="Default.aspx">企业CRM</a> <div class="collapse navbar-collapse"> <ul class="navbar-nav mr-auto"> <li class="nav-item"><a class="nav-link" href="ClientManagement.aspx">客户管理</a></li> <li class="nav-item"><a class="nav-link" href="Reports.aspx">数据分析</a></li> <li class="nav-item"><a class="nav-link" href="Announcements.aspx">公告栏</a></li> </ul> <asp:LoginView runat="server"> <AnonymousTemplate> <a href="Login.aspx" class="btn btn-light">登录</a> </AnonymousTemplate> <LoggedInTemplate> <span class="text-white mr-2">欢迎, <%: Context.User.Identity.Name %>!</span> <asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutPageUrl="~/Login.aspx" CssClass="btn btn-outline-light" /> </LoggedInTemplate> </asp:LoginView> </div> </div> </nav> <!-- 主要内容区域 --> <div class="container main-content"> <asp:ContentPlaceHolder ID="MainContent" runat="server"></asp:ContentPlaceHolder> </div> <!-- 页脚 --> <footer class="footer text-center"> <p>© <%: DateTime.Now.Year %> - 企业客户关系管理系统</p> </footer> </form> <script src="Scripts/jquery-3.6.0.min.js"></script> <script src="Scripts/bootstrap.min.js"></script> </body> </html> ``` #### 用户注册(Register.aspx) ```html <%@ Page Title="注册" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Register.aspx.cs" Inherits="Register" %> <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> <div class="row justify-content-center"> <div class="col-md-6"> <h2 class="text-center mb-4">用户注册</h2> <div class="form-group"> <label>用户名</label> <asp:TextBox ID="txtUsername" runat="server" CssClass="form-control" required></asp:TextBox> </div> <div class="form-group"> <label>密码</label> <asp:TextBox ID="txtPassword" runat="server" TextMode="Password" CssClass="form-control" required></asp:TextBox> </div> <div class="form-group"> <label>邮箱</label> <asp:TextBox ID="txtEmail" runat="server" TextMode="Email" CssClass="form-control" required></asp:TextBox> </div> <asp:Button ID="btnRegister" runat="server" Text="注册" CssClass="btn btn-primary btn-block" OnClick="btnRegister_Click" /> <div class="mt-3 text-center"> <asp:Label ID="lblMessage" runat="server" CssClass="text-danger"></asp:Label> </div> </div> </div> </asp:Content> ``` ```csharp // Register.aspx.cs using System; using System.Data.SqlClient; using System.Web.Security; public partial class Register : System.Web.UI.Page { protected void btnRegister_Click(object sender, EventArgs e) { string connectionString = ConfigurationManager.ConnectionStrings["CRMDB"].ConnectionString; using (SqlConnection con = new SqlConnection(connectionString)) { string query = "INSERT INTO Users (Username, Password, Email) VALUES (@Username, @Password, @Email)"; SqlCommand cmd = new SqlCommand(query, con); // 实际项目中应使用哈希加密 cmd.Parameters.AddWithValue("@Username", txtUsername.Text.Trim()); cmd.Parameters.AddWithValue("@Password", FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "SHA1")); cmd.Parameters.AddWithValue("@Email", txtEmail.Text.Trim()); try { con.Open(); int result = cmd.ExecuteNonQuery(); if (result > 0) { // 注册成功后自动登录 FormsAuthentication.SetAuthCookie(txtUsername.Text, false); Response.Redirect("Default.aspx"); } } catch (SqlException ex) { if (ex.Number == 2627) // 唯一约束冲突 { lblMessage.Text = "用户名已存在,请选择其他用户名"; } else { lblMessage.Text = "注册失败: " + ex.Message; } } } } } ``` #### 客户管理(ClientManagement.aspx) ```html <%@ Page Title="客户管理" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="ClientManagement.aspx.cs" Inherits="ClientManagement" %> <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> <div class="d-flex justify-content-between mb-3"> <h2>客户管理</h2> <asp:Button ID="btnAddClient" runat="server" Text="添加新客户" CssClass="btn btn-success" OnClick="btnAddClient_Click" /> </div> <!-- 搜索区域 --> <div class="card mb-4"> <div class="card-body"> <div class="row"> <div class="col-md-4"> <div class="form-group"> <label>客户名称</label> <asp:TextBox ID="txtSearchName" runat="server" CssClass="form-control"></asp:TextBox> </div> </div> <div class="col-md-4"> <div class="form-group"> <label>行业</label> <asp:DropDownList ID="ddlIndustry" runat="server" CssClass="form-control"> <asp:ListItem Text="全部" Value=""></asp:ListItem> <asp:ListItem Text="IT" Value="IT"></asp:ListItem> <asp:ListItem Text="金融" Value="金融"></asp:ListItem> <asp:ListItem Text="制造" Value="制造"></asp:ListItem> </asp:DropDownList> </div> </div> <div class="col-md-4 d-flex align-items-end"> <asp:Button ID="btnSearch" runat="server" Text="搜索" CssClass="btn btn-primary" OnClick="btnSearch_Click" /> </div> </div> </div> </div> <!-- 客户列表 --> <asp:GridView ID="gvClients" runat="server" AutoGenerateColumns="False" CssClass="table table-striped table-bordered" DataKeyNames="ClientID" OnRowEditing="gvClients_RowEditing" OnRowDeleting="gvClients_RowDeleting" OnRowCommand="gvClients_RowCommand"> <Columns> <asp:BoundField DataField="ClientName" HeaderText="客户名称" /> <asp:BoundField DataField="ContactPerson" HeaderText="联系人" /> <asp:BoundField DataField="Phone" HeaderText="电话" /> <asp:BoundField DataField="Industry" HeaderText="行业" /> <asp:BoundField DataField="Status" HeaderText="状态" /> <asp:TemplateField HeaderText="操作"> <ItemTemplate> <asp:Button ID="btnEdit" runat="server" Text="编辑" CommandName="Edit" CssClass="btn btn-sm btn-info" /> <asp:Button ID="btnDelete" runat="server" Text="删除" CommandName="Delete" CssClass="btn btn-sm btn-danger" OnClientClick="return confirm('确定删除该客户?');" /> <asp:Button ID="btnViewInteractions" runat="server" Text="交互记录" CommandName="ViewInteractions" CommandArgument='<%# Eval("ClientID") %>' CssClass="btn btn-sm btn-secondary" /> </ItemTemplate> </asp:TemplateField> </Columns> <EmptyDataTemplate> <div class="alert alert-info">没有找到匹配的客户记录</div> </EmptyDataTemplate> </asp:GridView> </asp:Content> ``` ```csharp // ClientManagement.aspx.cs using System; using System.Data; using System.Data.SqlClient; public partial class ClientManagement : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindClients(); } } private void BindClients() { string connectionString = ConfigurationManager.ConnectionStrings["CRMDB"].ConnectionString; string query = "SELECT ClientID, ClientName, ContactPerson, Phone, Industry, Status FROM Clients"; using (SqlConnection con = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(query, con)) { SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); gvClients.DataSource = dt; gvClients.DataBind(); } } protected void btnSearch_Click(object sender, EventArgs e) { string connectionString = ConfigurationManager.ConnectionStrings["CRMDB"].ConnectionString; string query = "SELECT ClientID, ClientName, ContactPerson, Phone, Industry, Status FROM Clients WHERE 1=1"; using (SqlConnection con = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(query, con); if (!string.IsNullOrEmpty(txtSearchName.Text)) { cmd.CommandText += " AND ClientName LIKE @Name"; cmd.Parameters.AddWithValue("@Name", "%" + txtSearchName.Text + "%"); } if (!string.IsNullOrEmpty(ddlIndustry.SelectedValue)) { cmd.CommandText += " AND Industry = @Industry"; cmd.Parameters.AddWithValue("@Industry", ddlIndustry.SelectedValue); } SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); gvClients.DataSource = dt; gvClients.DataBind(); } } protected void gvClients_RowEditing(object sender, GridViewEditEventArgs e) { int clientId = (int)gvClients.DataKeys[e.NewEditIndex].Value; Response.Redirect($"EditClient.aspx?id={clientId}"); } protected void gvClients_RowDeleting(object sender, GridViewDeleteEventArgs e) { int clientId = (int)gvClients.DataKeys[e.RowIndex].Value; string connectionString = ConfigurationManager.ConnectionStrings["CRMDB"].ConnectionString; string query = "DELETE FROM Clients WHERE ClientID = @ClientID"; using (SqlConnection con = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(query, con)) { cmd.Parameters.AddWithValue("@ClientID", clientId); con.Open(); cmd.ExecuteNonQuery(); } BindClients(); } protected void btnAddClient_Click(object sender, EventArgs e) { Response.Redirect("AddClient.aspx"); } } ``` #### 数据分析(Reports.aspx) ```html <%@ Page Title="数据分析" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Reports.aspx.cs" Inherits="Reports" %> <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> <h2 class="mb-4">客户数据分析</h2> <div class="row"> <!-- 行业分布图 --> <div class="col-md-6"> <div class="card"> <div class="card-header"> <h5>客户行业分布</h5> </div> <div class="card-body"> <asp:Chart ID="chartIndustry" runat="server" Width="500" Height="300"> <Series> <asp:Series Name="Series1" ChartType="Pie"></asp:Series> </Series> <ChartAreas> <asp:ChartArea Name="ChartArea1"></asp:ChartArea> </ChartAreas> </asp:Chart> </div> </div> </div> <!-- 状态统计 --> <div class="col-md-6"> <div class="card"> <div class="card-header"> <h5>客户状态统计</h5> </div> <div class="card-body"> <asp:GridView ID="gvStatusStats" runat="server" CssClass="table table-bordered"> </asp:GridView> </div> </div> </div> </div> <!-- 时间趋势图 --> <div class="card mt-4"> <div class="card-header"> <h5>新增客户趋势</h5> </div> <div class="card-body"> <asp:Chart ID="chartNewClients" runat="server" Width="900" Height="400"> <Series> <asp:Series Name="Series1" ChartType="Line"></asp:Series> </Series> <ChartAreas> <asp:ChartArea Name="ChartArea1"> <AxisX Title="月份"></AxisX> <AxisY Title="数量"></AxisY> </asp:ChartArea> </ChartAreas> </asp:Chart> </div> </div> </asp:Content> ``` ```csharp // Reports.aspx.cs using System; using System.Data; using System.Data.SqlClient; using System.Web.UI.DataVisualization.Charting; public partial class Reports : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindIndustryChart(); BindStatusStats(); BindNewClientsChart(); } } private void BindIndustryChart() { string connectionString = ConfigurationManager.ConnectionStrings["CRMDB"].ConnectionString; string query = "SELECT Industry, COUNT(*) AS Count FROM Clients GROUP BY Industry"; using (SqlConnection con = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(query, con)) { SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); chartIndustry.Series["Series1"].Points.DataBind(dt.Rows, "Industry", "Count", ""); chartIndustry.Series["Series1"]["PieLabelStyle"] = "Outside"; chartIndustry.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true; } } private void BindStatusStats() { string connectionString = ConfigurationManager.ConnectionStrings["CRMDB"].ConnectionString; string query = "SELECT Status, COUNT(*) AS Count FROM Clients GROUP BY Status"; using (SqlConnection con = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(query, con)) { SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); gvStatusStats.DataSource = dt; gvStatusStats.DataBind(); } } private void BindNewClientsChart() { string connectionString = ConfigurationManager.ConnectionStrings["CRMDB"].ConnectionString; string query = @"SELECT FORMAT(CreatedDate, 'yyyy-MM') AS Month, COUNT(*) AS NewClients FROM Clients WHERE CreatedDate >= DATEADD(MONTH, -6, GETDATE()) GROUP BY FORMAT(CreatedDate, 'yyyy-MM') ORDER BY Month"; using (SqlConnection con = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(query, con)) { SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); chartNewClients.Series["Series1"].Points.DataBind(dt.Rows, "Month", "NewClients", ""); chartNewClients.Series["Series1"].BorderWidth = 3; chartNewClients.Series["Series1"].Color = System.Drawing.Color.Blue; } } } ``` #### 后台账号管理(Admin/UserManagement.aspx) ```html <%@ Page Title="账号管理" Language="C#" MasterPageFile="~/Admin/AdminMaster.Master" AutoEventWireup="true" CodeFile="UserManagement.aspx.cs" Inherits="Admin_UserManagement" %> <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> <h2 class="mb-4">用户账号管理</h2> <asp:GridView ID="gvUsers" runat="server" AutoGenerateColumns="False" CssClass="table table-striped table-bordered" DataKeyNames="UserID" OnRowEditing="gvUsers_RowEditing" OnRowDeleting="gvUsers_RowDeleting"> <Columns> <asp:BoundField DataField="Username" HeaderText="用户名" /> <asp:BoundField DataField="Email" HeaderText="邮箱" /> <asp:BoundField DataField="Role" HeaderText="角色" /> <asp:BoundField DataField="RegistrationDate" HeaderText="注册日期" DataFormatString="{0:yyyy-MM-dd}" /> <asp:TemplateField HeaderText="操作"> <ItemTemplate> <asp:Button ID="btnEdit" runat="server" Text="编辑" CommandName="Edit" CssClass="btn btn-sm btn-info" /> <asp:Button ID="btnDelete" runat="server" Text="删除" CommandName="Delete" CssClass="btn btn-sm btn-danger" OnClientClick="return confirm('确定删除该用户?');" /> <asp:Button ID="btnResetPassword" runat="server" Text="重置密码" CssClass="btn btn-sm btn-warning" CommandArgument='<%# Eval("UserID") %>' OnClick="btnResetPassword_Click" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </asp:Content> ``` ```csharp // Admin/UserManagement.aspx.cs using System; using System.Data; using System.Data.SqlClient; public partial class Admin_UserManagement : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (!User.IsInRole("Admin")) { Response.Redirect("~/AccessDenied.aspx"); } BindUsers(); } } private void BindUsers() { string connectionString = ConfigurationManager.ConnectionStrings["CRMDB"].ConnectionString; string query = "SELECT UserID, Username, Email, Role, RegistrationDate FROM Users"; using (SqlConnection con = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(query, con)) { SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); gvUsers.DataSource = dt; gvUsers.DataBind(); } } protected void gvUsers_RowEditing(object sender, GridViewEditEventArgs e) { int userId = (int)gvUsers.DataKeys[e.NewEditIndex].Value; Response.Redirect($"EditUser.aspx?id={userId}"); } protected void gvUsers_RowDeleting(object sender, GridViewDeleteEventArgs e) { int userId = (int)gvUsers.DataKeys[e.RowIndex].Value; string connectionString = ConfigurationManager.ConnectionStrings["CRMDB"].ConnectionString; string query = "DELETE FROM Users WHERE UserID = @UserID"; using (SqlConnection con = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(query, con)) { cmd.Parameters.AddWithValue("@UserID", userId); con.Open(); cmd.ExecuteNonQuery(); } BindUsers(); } protected void btnResetPassword_Click(object sender, EventArgs e) { Button btn = (Button)sender; int userId = Convert.ToInt32(btn.CommandArgument); string connectionString = ConfigurationManager.ConnectionStrings["CRMDB"].ConnectionString; string query = "UPDATE Users SET Password = @Password WHERE UserID = @UserID"; using (SqlConnection con = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(query, con)) { // 重置为默认密码 string defaultPassword = FormsAuthentication.HashPasswordForStoringInConfigFile("123456", "SHA1"); cmd.Parameters.AddWithValue("@Password", defaultPassword); cmd.Parameters.AddWithValue("@UserID", userId); con.Open(); cmd.ExecuteNonQuery(); } // 显示成功消息 ClientScript.RegisterStartupScript(this.GetType(), "resetSuccess", "alert('密码已重置为默认密码123456');", true); } } ``` ### 系统功能说明 1. **用户认证系统** - 基于ASP.NET Forms身份验证 - 密码使用SHA1哈希存储 - 角色管理(Admin/Sales/Customer) 2. **客户管理** - 客户信息增删改查 - 客户状态跟踪(活跃/潜在/非活跃) - 交互记录管理 3. **数据分析** - 行业分布饼图 - 客户状态统计表 - 新增客户趋势图 4. **后台管理** - 用户账号管理 - 角色权限控制 - 密码重置功能 5. **技术要点** - 母版页统一界面风格 - Bootstrap响应式设计 - ADO.NET数据访问 - 图表数据可视化 - 参数化SQL防止注入 ### 部署说明 1. 在IIS中创建新网站 2. 配置Web.config中的数据库连接字符串 3. 执行提供的SQL脚本创建数据库 4. 发布ASP.NET应用程序到IIS目录 此系统满足项目所有要求,包含完整的用户管理、业务数据处理、数据分析功能,并采用规范的数据库设计和响应式界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值