当前位置: 首页 > news >正文

2003怎么建设网站空间上网建立网站布置

2003怎么建设网站空间,上网建立网站布置,郑州居家办公全员核酸,阿里云虚拟主机做淘客网站WPF高级 | WPF 与数据库交互#xff1a;连接、查询与数据更新 前言一、数据库交互基础概念1.1 数据库简介1.2 数据访问技术 二、WPF 与数据库连接2.1 连接字符串2.2 建立连接 三、WPF 中的数据查询3.1 使用ADO.NET进行数据查询3.2 使用 Entity Framework 进行数据查询3.3 使用… WPF高级 | WPF 与数据库交互连接、查询与数据更新 前言一、数据库交互基础概念1.1 数据库简介1.2 数据访问技术 二、WPF 与数据库连接2.1 连接字符串2.2 建立连接 三、WPF 中的数据查询3.1 使用ADO.NET进行数据查询3.2 使用 Entity Framework 进行数据查询3.3 使用 Dapper 进行数据查询 四、WPF 中的数据更新4.1 使用ADO.NET进行数据更新4.2 使用 Entity Framework 进行数据更新4.3 使用 Dapper 进行数据更新 五、数据绑定与显示5.1 将查询结果绑定到 WPF 控件5.2 实现数据的实时更新显示 六、错误处理与事务6.1 错误处理6.2 事务处理 七、总结结束语优质源码分享 WPF高级 | WPF 与数据库交互连接、查询与数据更新 在现代应用程序开发中数据的存储和管理至关重要。Windows Presentation FoundationWPF作为一款强大的图形界面开发框架常常需要与数据库进行交互以实现数据的持久化存储、读取和更新。本文将深入探讨 WPF 与数据库交互的各个方面包括数据库连接的建立、数据查询的执行以及数据更新的操作并通过丰富的代码示例和详细的概念解释帮助读者掌握这一关键技术。 前言 在数字浪潮汹涌澎湃的时代程序开发宛如一座神秘而宏伟的魔法城堡矗立在科技的浩瀚星空中。代码的字符似那闪烁的星辰按照特定的轨迹与节奏组合、交织、碰撞即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索程序员们则化身无畏的星辰开拓者指尖在键盘上轻舞准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷在 0 和 1 的二进制世界里镌刻下属于人类创新与突破的不朽印记。 在当今数字化时代桌面应用程序的用户界面UI设计至关重要它直接影响着用户体验与产品的竞争力。而 WPFWindows Presentation Foundation作为微软推出的一款强大的 UI 框架其布局系统更是构建精美界面的核心要素。WPF 布局系统为开发者提供了丰富多样的布局方式能够轻松应对各种复杂的界面设计需求无论是简洁明了的工具软件还是功能繁杂的企业级应用都能借助其打造出令人惊艳的视觉效果与流畅的交互体验。 WPF从入门到精通专栏旨在为读者呈现一条从对 WPFWindows Presentation Foundation技术懵懂无知到精通掌握的学习路径。首先从基础入手介绍 WPF 的核心概念涵盖其独特的架构特点、开发环境搭建流程详细解读布局系统、常用控件以及事件机制等基础知识帮助初学者搭建起对 WPF 整体的初步认知框架。随着学习的深入进阶部分聚焦于数据绑定、样式模板、动画特效等关键知识点进一步拓展 WPF 开发的能力边界使开发者能够打造出更为个性化、交互性强的桌面应用界面。高级阶段则涉及自定义控件开发、MVVM 设计模式应用、多线程编程等深层次内容助力开发者应对复杂的业务需求构建大型且可维护的应用架构。同时通过实战项目案例解析展示如何将所学知识综合运用到实际开发中从需求分析到功能实现再到优化测试全方位积累实践经验。此外还探讨了性能优化、与其他技术集成以及安全机制等拓展性话题让读者对 WPF 技术在不同维度有更深入理解最终实现对 WPF 技术的精通掌握具备独立开发高质量桌面应用的能力。 点击进入WPF从入门到精通专栏 一、数据库交互基础概念 1.1 数据库简介 数据库是按照数据结构来组织、存储和管理数据的仓库。常见的数据库管理系统DBMS有 SQL Server、MySQL、Oracle 等。在 WPF 应用中选择合适的数据库取决于项目的需求如数据量大小、性能要求、成本等因素。例如SQL Server 是微软的关系型数据库与.NET 框架集成度高适合企业级应用MySQL 是开源的关系型数据库成本低性能较好广泛应用于各种规模的项目。 1.2 数据访问技术 在.NET 开发中有多种数据访问技术可用于 WPF 与数据库交互常见的有ADO.NET、Entity Framework 和 Dapper。 ADO.NET是.NET Framework 中用于访问数据的基本技术它提供了一组用于与各种数据源进行交互的类包括数据库、文件系统等。ADO.NET主要由 Connection、Command、DataReader、DataAdapter 等对象组成。例如使用ADO.NET连接 SQL Server 数据库 using System.Data.SqlClient;string connectionString Data SourceYOUR_SERVER_NAME;Initial CatalogYOUR_DATABASE_NAME;User IDYOUR_USERNAME;PasswordYOUR_PASSWORD; using (SqlConnection connection new SqlConnection(connectionString)) {connection.Open();// 在这里执行数据库操作 }Entity Framework是一种对象关系映射ORM框架它允许开发者使用.NET 对象来操作数据库而无需编写大量的 SQL 语句。Entity Framework 会自动将对象的操作转换为对应的 SQL 语句。例如使用 Entity Framework 创建一个简单的数据库上下文 using System.Data.Entity;public class MyDbContext : DbContext {public DbSetProduct Products { get; set; } }public class Product {public int Id { get; set; }public string Name { get; set; }public decimal Price { get; set; } }Dapper是一个轻量级的 ORM 框架它在性能上表现出色适用于对性能要求较高的场景。Dapper 主要通过SqlMapper类来执行 SQL 语句并将结果映射到对象。例如使用 Dapper 查询数据 using Dapper; using System.Data.SqlClient;string connectionString Data SourceYOUR_SERVER_NAME;Initial CatalogYOUR_DATABASE_NAME;User IDYOUR_USERNAME;PasswordYOUR_PASSWORD; using (SqlConnection connection new SqlConnection(connectionString)) {var products connection.QueryProduct(SELECT * FROM Products).ToList(); }二、WPF 与数据库连接 2.1 连接字符串 连接字符串是用于建立与数据库连接的关键信息它包含了数据库服务器地址、数据库名称、用户名、密码等信息。连接字符串的格式因数据库类型而异。例如SQL Server 的连接字符串格式如下 Data Source服务器名称;Initial Catalog数据库名称;User ID用户名;Password密码MySQL 的连接字符串格式如下 server服务器地址;database数据库名称;uid用户名;pwd密码;在 WPF 应用中可以将连接字符串存储在配置文件如app.config或web.config中以便于管理和修改。例如在app.config中添加连接字符串 configurationconnectionStringsadd nameMyConnectionString connectionStringData SourceYOUR_SERVER_NAME;Initial CatalogYOUR_DATABASE_NAME;User IDYOUR_USERNAME;PasswordYOUR_PASSWORD providerNameSystem.Data.SqlClient //connectionStrings /configuration在代码中读取连接字符串 string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString;2.2 建立连接 使用ADO.NET建立连接通过SqlConnection类针对 SQL Server或其他数据库对应的连接类来建立连接。 using System.Data.SqlClient;string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString; using (SqlConnection connection new SqlConnection(connectionString)) {try{connection.Open();MessageBox.Show(连接成功);}catch (Exception ex){MessageBox.Show(连接失败 ex.Message);} }使用 Entity Framework 建立连接在创建DbContext实例时Entity Framework 会根据配置文件中的连接字符串自动建立连接。 using System.Data.Entity;public class MyDbContext : DbContext {public MyDbContext() : base(nameMyConnectionString){}public DbSetProduct Products { get; set; } }在使用时 using (MyDbContext context new MyDbContext()) {// 在这里执行数据库操作 }三、WPF 中的数据查询 3.1 使用ADO.NET进行数据查询 使用 SqlDataReader 读取数据SqlDataReader是一种快速、只进的读取器用于从数据库中读取数据。 using System.Data.SqlClient;string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString; using (SqlConnection connection new SqlConnection(connectionString)) {string query SELECT * FROM Products;using (SqlCommand command new SqlCommand(query, connection)){connection.Open();using (SqlDataReader reader command.ExecuteReader()){while (reader.Read()){int id reader.GetInt32(0);string name reader.GetString(1);decimal price reader.GetDecimal(2);// 处理读取到的数据}}} }使用 DataSet 和 DataAdapter 填充数据DataSet是一个内存中的数据缓存DataAdapter用于在数据库和DataSet之间进行数据传输。 using System.Data.SqlClient;string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString; using (SqlConnection connection new SqlConnection(connectionString)) {string query SELECT * FROM Products;using (SqlDataAdapter adapter new SqlDataAdapter(query, connection)){DataSet dataSet new DataSet();adapter.Fill(dataSet, Products);// 处理dataSet中的数据} }3.2 使用 Entity Framework 进行数据查询 Entity Framework 提供了 LINQ to Entities 查询语法使得查询操作更加简洁和直观。 using (MyDbContext context new MyDbContext()) {var products from p in context.Productswhere p.Price 100orderby p.Nameselect p;foreach (var product in products){// 处理查询结果} }还可以使用 Lambda 表达式进行查询 using (MyDbContext context new MyDbContext()) {var products context.Products.Where(p p.Price 100).OrderBy(p p.Name).ToList();foreach (var product in products){// 处理查询结果} }3.3 使用 Dapper 进行数据查询 Dapper 的查询操作基于 SQL 语句通过Query方法执行查询并将结果映射到对象。 using Dapper; using System.Data.SqlClient;string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString; using (SqlConnection connection new SqlConnection(connectionString)) {string query SELECT * FROM Products WHERE Price Price;var products connection.QueryProduct(query, new { Price 100 }).ToList();foreach (var product in products){// 处理查询结果} }四、WPF 中的数据更新 4.1 使用ADO.NET进行数据更新 使用 SqlCommand 执行更新语句通过SqlCommand的ExecuteNonQuery方法执行 SQL 更新语句。 using System.Data.SqlClient;string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString; using (SqlConnection connection new SqlConnection(connectionString)) {string updateQuery UPDATE Products SET Price NewPrice WHERE Id Id;using (SqlCommand command new SqlCommand(updateQuery, connection)){command.Parameters.AddWithValue(NewPrice, 150.0m);command.Parameters.AddWithValue(Id, 1);connection.Open();int rowsAffected command.ExecuteNonQuery();if (rowsAffected 0){MessageBox.Show(数据更新成功);}else{MessageBox.Show(数据更新失败);}} }使用 DataAdapter 更新 DataSet 并同步到数据库先修改DataSet中的数据然后通过DataAdapter的Update方法将更改同步到数据库。 using System.Data.SqlClient;string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString; using (SqlConnection connection new SqlConnection(connectionString)) {string query SELECT * FROM Products;using (SqlDataAdapter adapter new SqlDataAdapter(query, connection)){SqlCommandBuilder builder new SqlCommandBuilder(adapter);DataSet dataSet new DataSet();adapter.Fill(dataSet, Products);DataRow row dataSet.Tables[Products].Rows[0];row[Price] 150.0m;adapter.Update(dataSet, Products);} }4.2 使用 Entity Framework 进行数据更新 修改实体对象并保存更改在 Entity Framework 中修改实体对象的属性然后调用SaveChanges方法保存更改。 using (MyDbContext context new MyDbContext()) {var product context.Products.FirstOrDefault(p p.Id 1);if (product! null){product.Price 150.0m;context.SaveChanges();MessageBox.Show(数据更新成功);}else{MessageBox.Show(未找到要更新的数据);} }使用 DbSet 的 Attach 和 Entry 方法更新对于从其他地方获取的实体对象可以使用Attach方法将其附加到上下文然后使用Entry方法标记属性的更改状态。 using (MyDbContext context new MyDbContext()) {var product new Product { Id 1, Name Product Name, Price 150.0m };context.Products.Attach(product);context.Entry(product).Property(p p.Price).IsModified true;context.SaveChanges(); }4.3 使用 Dapper 进行数据更新 Dapper 通过Execute方法执行 SQL 更新语句。 using Dapper; using System.Data.SqlClient;string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString; using (SqlConnection connection new SqlConnection(connectionString)) {string updateQuery UPDATE Products SET Price NewPrice WHERE Id Id;int rowsAffected connection.Execute(updateQuery, new { NewPrice 150.0m, Id 1 });if (rowsAffected 0){MessageBox.Show(数据更新成功);}else{MessageBox.Show(数据更新失败);} }五、数据绑定与显示 5.1 将查询结果绑定到 WPF 控件 在 WPF 中可以将数据库查询结果绑定到各种控件如ListView、DataGrid等。 使用 ListView 显示数据首先创建一个包含数据的集合然后将其绑定到ListView的ItemsSource属性。 ListView x:NameProductListViewListView.ViewGridViewGridViewColumn HeaderID DisplayMemberBinding{Binding Id}/GridViewColumn HeaderName DisplayMemberBinding{Binding Name}/GridViewColumn HeaderPrice DisplayMemberBinding{Binding Price}//GridView/ListView.View /ListViewusing (MyDbContext context new MyDbContext()) {var products context.Products.ToList();ProductListView.ItemsSource products; }使用 DataGrid 显示数据DataGrid提供了更丰富的数据展示和编辑功能。 DataGrid x:NameProductDataGrid AutoGenerateColumnsTrue/using (MyDbContext context new MyDbContext()) {var products context.Products.ToList();ProductDataGrid.ItemsSource products; }5.2 实现数据的实时更新显示 当数据库中的数据发生变化时为了在 WPF 界面上实时显示更新可以使用ObservableCollection结合数据绑定。ObservableCollection是一个动态数据集合当集合中的元素发生变化时会自动通知绑定的 UI 元素进行更新。 public class ProductViewModel : INotifyPropertyChanged {private ObservableCollectionProduct _products;public ObservableCollectionProduct Products{get { return _products; }set{_products value;OnPropertyChanged(nameof(Products));}}public ProductViewModel(){LoadProducts();}private void LoadProducts(){using (MyDbContext context new MyDbContext()){Products new ObservableCollectionProduct(context.Products.ToList());}}public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));} }在 XAML 中绑定 Window.DataContextlocal:ProductViewModel/ /Window.DataContext DataGrid x:NameProductDataGrid ItemsSource{Binding Products}/当数据更新后重新加载数据并更新ObservableCollection界面会自动刷新显示最新数据。 六、错误处理与事务 6.1 错误处理 在与数据库交互过程中可能会出现各种错误如连接失败、查询语法错误、数据更新冲突等。合理的错误处理可以提高应用程序的稳定性和用户体验。 使用 try - catch 块捕获异常在执行数据库操作时使用try - catch块捕获可能出现的异常并进行相应的处理。 using System.Data.SqlClient;string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString; using (SqlConnection connection new SqlConnection(connectionString)) {try{string query SELECT * FROM Products;using (SqlCommand command new SqlCommand(query, connection)){connection.Open();using (SqlDataReader reader command.ExecuteReader()){while (reader.Read()){// 处理数据}}}}catch (SqlException ex){MessageBox.Show(数据库操作错误 ex.Message);}catch (Exception ex){MessageBox.Show(其他错误 ex.Message);} }记录错误日志将错误信息记录到日志文件中以便后续分析和排查问题。可以使用第三方日志库如 Log4Net。 using log4net; using System.Data.SqlClient;private static readonly ILog log LogManager.GetLogger(typeof(YourClassName));string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString; using (SqlConnection connection new SqlConnection(connectionString)) {try{// 数据库操作}catch (SqlException ex){log.Error(数据库操作错误, ex);MessageBox.Show(数据库操作错误 ex.Message);}catch (Exception ex){log.Error(其他错误, ex);MessageBox.Show(其他错误 ex.Message);} }6.2 事务处理 事务是一组数据库操作的集合这些操作要么全部成功执行要么全部回滚。在 WPF 与数据库交互中事务处理尤为重要特别是在涉及多个相互关联的数据更新操作时它能确保数据的完整性和一致性。例如在一个银行转账操作中需要同时从转出账户扣除金额并向转入账户增加金额这两个操作必须作为一个事务来处理否则可能导致数据不一致出现金额丢失或错误增加的情况。 1. 使用ADO.NET处理事务 在ADO.NET中可以通过SqlTransaction类来管理事务。以下是一个使用ADO.NET进行事务处理的示例假设我们要在数据库中插入一条新的产品记录同时更新另一条相关记录的状态 using System.Data.SqlClient;string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString; using (SqlConnection connection new SqlConnection(connectionString)) {connection.Open();SqlTransaction transaction connection.BeginTransaction();try{string insertQuery INSERT INTO Products (Name, Price) VALUES (Name, Price);using (SqlCommand insertCommand new SqlCommand(insertQuery, connection, transaction)){insertCommand.Parameters.AddWithValue(Name, New Product);insertCommand.Parameters.AddWithValue(Price, 99.99m);insertCommand.ExecuteNonQuery();}string updateQuery UPDATE RelatedRecords SET Status Status WHERE ProductId SCOPE_IDENTITY();using (SqlCommand updateCommand new SqlCommand(updateQuery, connection, transaction)){updateCommand.Parameters.AddWithValue(Status, Updated);updateCommand.ExecuteNonQuery();}transaction.Commit();MessageBox.Show(操作成功完成);}catch (Exception ex){transaction.Rollback();MessageBox.Show(操作失败已回滚 ex.Message);} }在这个示例中首先通过BeginTransaction方法开始一个事务然后在事务中执行插入和更新操作。如果所有操作都成功调用Commit方法提交事务如果在任何一个操作中出现异常catch块会捕获异常并调用Rollback方法回滚事务从而确保数据库的一致性。 2. 使用 Entity Framework 处理事务 在 Entity Framework 中事务管理相对简洁因为DbContext的SaveChanges方法默认是原子操作即要么所有更改都保存到数据库要么都不保存。然而当需要在多个SaveChanges调用之间进行事务处理时可以使用TransactionScope类。以下是一个示例 using System.Transactions; using (TransactionScope scope new TransactionScope()) {using (MyDbContext context new MyDbContext()){var newProduct new Product { Name New Product, Price 99.99m };context.Products.Add(newProduct);context.SaveChanges();var relatedRecord context.RelatedRecords.FirstOrDefault(r r.ProductId newProduct.Id);if (relatedRecord! null){relatedRecord.Status Updated;context.SaveChanges();}}scope.Complete(); }在这个示例中TransactionScope会自动管理事务的开始、提交和回滚。在TransactionScope块内的所有DbContext操作都属于同一个事务。如果所有操作成功完成调用scope.Complete()方法提交事务如果出现异常事务会自动回滚。 3. 使用 Dapper 处理事务     Dapper 本身没有内置的事务管理类但可以利用SqlTransaction来实现事务处理。示例如下 using Dapper; using System.Data.SqlClient;string connectionString ConfigurationManager.ConnectionStrings[MyConnectionString].ConnectionString; using (SqlConnection connection new SqlConnection(connectionString)) {connection.Open();SqlTransaction transaction connection.BeginTransaction();try{string insertQuery INSERT INTO Products (Name, Price) VALUES (Name, Price);connection.Execute(insertQuery, new { Name New Product, Price 99.99m }, transaction);string updateQuery UPDATE RelatedRecords SET Status Status WHERE ProductId SCOPE_IDENTITY();connection.Execute(updateQuery, new { Status Updated }, transaction);transaction.Commit();MessageBox.Show(操作成功完成);}catch (Exception ex){transaction.Rollback();MessageBox.Show(操作失败已回滚 ex.Message);} }这里通过BeginTransaction开始事务在Execute方法中传入transaction参数确保所有操作都在同一个事务中执行最后根据操作结果决定是提交还是回滚事务。 七、总结 通过本文的详细阐述我们全面了解了 WPF 与数据库交互的关键技术涵盖从数据库连接、数据查询、数据更新到数据绑定显示以及错误处理和事务管理等各个方面。不同的数据访问技术如ADO.NET、Entity Framework 和 Dapper为开发者提供了多样化的选择每种技术都有其独特的优势和适用场景。在实际开发中应根据项目的具体需求选择合适的技术和方法来实现高效、稳定的数据库交互功能。随着技术的不断发展WPF 与数据库交互的方式也将不断演进开发者需要持续关注新技术、新特性以提升应用程序的数据处理能力和用户体验。掌握这些知识和技能将为构建功能强大、数据驱动的 WPF 应用程序奠定坚实的基础。 结束语 展望未来WPF 布局系统依然有着广阔的发展前景。随着硬件技术的不断革新如高分辨率屏幕、折叠屏设备的日益普及WPF 布局系统有望进一步强化其自适应能力为用户带来更加流畅、一致的体验。在应对高分辨率屏幕时能够更加智能地缩放和布局元素确保文字清晰可读、图像不失真对于折叠屏设备可动态调整布局结构充分利用多屏空间实现无缝切换。 性能优化方面微软及广大开发者社区将持续努力进一步降低复杂布局的计算开销提高布局更新的效率使得 WPF 应用在处理大规模数据、动态界面时依然能够保持高效响应。通过改进算法、优化内存管理等手段让 WPF 布局系统在性能上更上一层楼。 亲爱的朋友无论前路如何漫长与崎岖都请怀揣梦想的火种因为在生活的广袤星空中总有一颗属于你的璀璨星辰在熠熠生辉静候你抵达。 愿你在这纷繁世间能时常收获微小而确定的幸福如春日微风轻拂面庞所有的疲惫与烦恼都能被温柔以待内心永远充盈着安宁与慰藉。 至此文章已至尾声而您的故事仍在续写不知您对文中所叙有何独特见解期待您在心中与我对话开启思想的新交流。 --------------- 业精于勤荒于嬉 --------------- --------------- 行成于思毁于随 --------------- 优质源码分享 【百篇源码模板】html5各行各业官网模板源码下载 【模板源码】html实现酷炫美观的可视化大屏(十种风格示例附源码) 【VUE系列】VUE3实现个人网站模板源码 【HTML源码】HTML5小游戏源码 【C#实战案例】C# Winform贪吃蛇小游戏源码 关注博主 带你实现畅游前后端 大屏可视化 带你体验酷炫大屏 神秘个人简介 带你体验不一样得介绍 酷炫邀请函 带你体验高大上得邀请 ① 提供云服务部署有自己的阿里云      ② 提供前端、后端、应用程序、H5、小程序、公众号等相关业务      如合作请联系我期待您的联系。     注本文撰写于CSDN平台,作者xcLeigh所有权归作者所有 https://blog.csdn.net/weixin_43151418如果相关下载没有跳转请查看这个地址相关链接没有跳转皆是抄袭本文转载请备注本文原地址。 亲码字不易动动小手欢迎 点赞 ➕ 收藏如 问题请留言评论博主看见后一定及时给您答复 原文地址https://blog.csdn.net/weixin_43151418/article/details/145470241防止抄袭原文地址不可删除
http://www.dnsts.com.cn/news/280630.html

相关文章:

  • 泉州建行 网站注册域名之后如何建设网站
  • 成都网站建设58深圳做自适应网站制作
  • 阿里巴巴网站建设方案在线编辑
  • 多人一起做视频网站wordpress弹窗登录
  • 京东联盟网站推广位怎么做黔南服务好的高端网站设计公司
  • 沈阳行业网站信息流广告怎么投放
  • 北京专业的做网站网站建设的基础常识
  • 手机电视直播网站大全电商网站统计怎么做
  • 做矿业的郑州公司网站网络工程是什么
  • 罗湖医院网站建设普同网站跟营销型网站的区别
  • 创建网站大约多少钱2018杭州旅游网站开发说明书
  • 云南省和城乡建设厅网站深圳的装修公司排名
  • 网站加手机建设png图标十六局门户网登录
  • 网站建设要学会编程吗html静态网页制作代码免费
  • 用dw软件做网站栅格系统公司装修图片大全
  • 课程网站课程资源建设小制作手工 小学生
  • 彻底关闭qq顶部小程序入口高要seo整站优化
  • 小说网站建设方案书ppt模板莱芜吧诚意带大家修车
  • 电影网站开发视频教程男女第一次做网站爱
  • 手机网站会员中心模板下载wordpress破解授权码
  • 北京建设网网站html5手机网站制作教程
  • 徐州网站制作公司哪家好企业做国外网站多少钱
  • 家居网站开发项目计划书北京营销推广公司
  • 百度官方网站登录外卖网站建设可行性分析
  • 百度网站建设的意义手机版 演示 网站 触摸
  • 农商网站建设个人总结网站建设需要域名吗
  • 生态文明建设wordpress百度收录优化
  • 临沂网站设计建设个人主页网页设计源代码
  • 基础微网站开发可信赖成都手机模板建站
  • 网站建设常用的编程语言网站建设背景