entity framework codefirst 用戶代碼未處理DataException,InnerException基礎提供程式在open上失敗,資料庫生成失敗

来源:http://www.cnblogs.com/herbertchina/archive/2016/08/18/5784550.html
-Advertisement-
Play Games

警告:這是一個入門級日誌,如果你很瞭解CodeFirst,那請繞道 背景:這篇日誌記錄我使用Entity FrameWork CodeFirst時出現的錯誤和解決問題的過程,雖然有點曲折……勿噴 備註:這確實算是Entity FrameWork CodeFirst的問題個人也不知道應該給文章加什麼樣 ...


警告:這是一個入門級日誌,如果你很瞭解CodeFirst,那請繞道

背景:這篇日誌記錄我使用Entity FrameWork CodeFirst時出現的錯誤和解決問題的過程,雖然有點曲折……勿噴

備註:這確實算是Entity FrameWork CodeFirst的問題個人也不知道應該給文章加什麼樣的關鍵字和標題,方便各位朋友搜索

一、問題出現

當我參考 洞庭夕照 博客 ASP.NET MVC5 網站開發實踐 - 概述 按照代碼一點點嘗試CodeFirst(雖然這不是一個針對CodeFirst的教程),當添加到註冊頁面執行並點擊註冊按鈕後,出現了這樣的錯誤(菜鳥考慮問題的思維):

出現原因補充:這個錯誤在CodeFirst第一次執行的時候是沒有問題的,當你刪除了CodeFirst自動生成的資料庫db文件,再重新嘗試運行就會出現問題了,不會再重新生成資料庫文件!

用戶代碼未處理DataException,初始化資料庫時出現異常。請參見內部異常的詳細信息。
InnerException:基礎提供程式在open上失敗,{"The underlying provider failed on Open."}
InnerException:{"Cannot attach the file 'E:\\ProjectOwn\\PlantGarden\\MvcWeChat\\App_Data\\MvcWeChatDb20160812114343.mdf' as database 'MvcWeChatDb20160812114343'."}

image

image

二、考慮過程第一點

因為是菜鳥,對Entity 和CodeFirst都不甚瞭解,所以太不上自己深究,於是乎我採取的第一個解決方式和大家一樣,百度或者谷歌,當然,解決方案不是那麼容易找到,雖然很多一樣的錯誤,但是通常出現的場合,並不能解決問題。雖然如此,我們確實有所借鑒,在錯誤提示的搜索過程中,我發現很多文章提及到 PM 的 Update-Database 命令,看含義應該是用來手動更新資料庫的,但是既然我的代碼使用了CodeFirst沒有生成成功資料庫,是不是這個命令會提示我什麼有價值的東西呢?且看下麵代碼:

程式包管理器控制台主機版本 2.8.60318.667

PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No migrations configuration type was found in the assembly 'MvcWeChat'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).
PM> Update-Database -Verbose
Using StartUp project 'MvcWeChat'.
Using NuGet project 'MvcWeChat'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
System.Data.Entity.Migrations.Infrastructure.MigrationsException: No migrations configuration type was found in the assembly 'MvcWeChat'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).
   在 System.Data.Entity.Utilities.TypeFinder.FindType(Type baseType, String typeName, Func`2 filter, Func`2 noType, Func`3 multipleTypes, Func`3 noTypeWithName, Func`3 multipleTypesWithName)
   在 System.Data.Entity.Migrations.Utilities.MigrationsConfigurationFinder.FindMigrationsConfiguration(Type contextType, String configurationTypeName, Func`2 noType, Func`3 multipleTypes, Func`3 noTypeWithName, Func`3 multipleTypesWithName)
   在 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.FindConfiguration()
   在 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()
   在 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
   在 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   在 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   在 System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   在 System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   在 System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
No migrations configuration type was found in the assembly 'MvcWeChat'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).

PM> Enable-Migrations
No context type was found in the assembly 'MvcWeChat'.

PM> Enable-Migrations
Checking if the context targets an existing database...
Code First Migrations enabled for project MvcWeChat.DAL.

PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No pending explicit migrations.
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
You can use the Add-Migration command to write the pending model changes to a code-based migration.

PM> Update-Database -Verbose
Using StartUp project 'MvcWeChat'.
Using NuGet project 'MvcWeChat.DAL'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'MvcWeChatDb20160812114343' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
No pending explicit migrations.
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
You can use the Add-Migration command to write the pending model changes to a code-based migration.
PM> 

我們一步步分析:

首先Update-Database:

PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No migrations configuration type was found in the assembly 'MvcWeChat'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).

提示我在 MvcWeChat 中沒有找到遷移配置,就是並沒有找到資料庫更新的什麼配置,於是先使用提示中的 Update-Database -Verbose看詳情,錯誤還是差不多,於是考慮使用第二個提示命令Enable-Migrations :

PM> Enable-Migrations
No context type was found in the assembly 'MvcWeChat'.

結果發現在項目MvcWeChat中沒有 context,這我差不多就理解了,我的項目結構中DbContext是在DAL中的,並不是在主項目MvcWeChat中的 (DbContext 是數據上下文,Entity資料庫交互關鍵類型 ,也是CodeFirst的關鍵,我也沒有理解多透徹,不懂的自己百度呢)

image

於是更改項目:

image

在執行代碼:

PM> Enable-Migrations
Checking if the context targets an existing database...
Code First Migrations enabled for project MvcWeChat.DAL.

按照代碼的講法,為項目 MvcWeChat.DAL 啟用了Code First 遷移,看起來不錯。再看看代碼,項目MvcWeChat.DAL中被添加了一個類

image

namespace MvcWeChat.DAL.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class Configuration : DbMigrationsConfiguration<MvcWeChat.DAL.MvcWeChatDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(MvcWeChat.DAL.MvcWeChatDbContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data. E.g.
            //
            //    context.People.AddOrUpdate(
            //      p => p.FullName,
            //      new Person { FullName = "Andrew Peters" },
            //      new Person { FullName = "Brice Lambson" },
            //      new Person { FullName = "Rowan Miller" }
            //    );
            //
        }
    }
}

上面的代碼應該是更新資料庫時候用,且不管

這個時候我再執行 :

PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No pending explicit migrations.
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
You can use the Add-Migration command to write the pending model changes to a code-based migration.
PM> 

沒有掛起顯式遷移。

無法更新資料庫,以匹配當前的模型,因為有掛起的更改和自動遷移被禁用。掛起模式更改寫入代碼基於遷移或啟用自動遷移。設置對啟用自動遷移到 DbMigrationsConfiguration.AutomaticMigrationsEnabled。

您可以使用添加遷移命令掛起模式更改寫入基於代碼的遷移。

嘿嘿,聯想起之前的代碼:的亮點是 AutomaticMigrationsEnabled = false; 於是我們該為 true 再執行:

PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No pending explicit migrations.
Applying automatic migration: 201608180628454_AutomaticMigration.
System.Data.SqlClient.SqlException (0x80131904): Cannot attach the file 'E:\ProjectOwn\PlantGarden\MvcWeChat\App_Data\MvcWeChatDb20160812114343.mdf' as database 'MvcWeChatDb20160812114343'.
   在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
   在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   在 System.Data.SqlClient.SqlConnection.Open()
   在 System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.<Open>b__36(DbConnection t, DbConnectionInterceptionContext c)
   在 System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext](TTarget target, Action`2 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
   在 System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection connection, DbInterceptionContext interceptionContext)
   在 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection)
   在 System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass30.<ExecuteStatements>b__2e()
   在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0()
   在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
   在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
   在 System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements, DbTransaction existingTransaction)
   在 System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements)
   在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
   在 System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable`1 operations, IEnumerable`1 systemOperations, Boolean downgrading, Boolean auto)
   在 System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading)
   在 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading)
   在 System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   在 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   在 System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   在 System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
   在 System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   在 System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   在 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
   在 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   在 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   在 System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   在 System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   在 System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
ClientConnectionId:a2fd50b1-37f8-48d2-bb4b-3690cb8a3fc1
Error Number:1832,State:1,Class:14
Cannot attach the file 'E:\ProjectOwn\PlantGarden\MvcWeChat\App_Data\MvcWeChatDb20160812114343.mdf' as database 'MvcWeChatDb20160812114343'.

這個時候,終於報了和本文一開始遇到的錯誤一樣的錯誤信息了!

呵呵,錯誤到此本思路結束了,但是並沒有解決問題啊!

三、考慮過程第二點

在第一段中,我們發現是我的DB沒有找到!DB的配置在Web.config 中

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <connectionStrings>
    <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MvcWeChatDb20160812114343;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcWeChatDb20160812114343.mdf" />
  </connectionStrings>

這段代碼是添加 DbContext 的時候 entityFramework 自動生成的連接字元串

錯誤在連接字元串,我就考慮查找 entityFramework 連接的問題,據一番搜索,我瞭解到Entity Framework連接的兩種形式

1、Entity Framework預設連接方式

2、自定義連接字元串方式

參考(https://blogs.msdn.microsoft.com/davidobando/2012/08/14/changing-efs-default-connection-factory-from-localdb-to-sql-server/

參考(http://www.cnblogs.com/kenshincui/p/3286103.html

當我沒有添加自定義的連接字元串(connectionStrings)的時候,Entity Framework使用預設連接方式,我們給一個空項目通過NuGet添加Entity Framework之後,web.config中會出現配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v13.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

重點是下麵的小節entityFramework,有一個預設的連接方式defaultConnectionFactory,LocalDbConnectionFactory

下麵提供預設連接配置方式:

LocalDb

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0"/>
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

Sql Server

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True"/>
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

我們首先嘗試這種預設的方式,先註釋掉上面的那段自定義連接語句

  <!--<connectionStrings>
    <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MvcWeChatDb20160812114343;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcWeChatDb20160812114343.mdf" />
  </connectionStrings>-->

然後直接跑代碼

image

這個問題呢百度上倒是能搜索到相關解決方案 http://www.cnblogs.com/summit7ca/p/4559694.html 

這篇博客貌似有點問題,代碼寫錯了,查看LoaclDB版本用:

PM> sqllocaldb info
MSSQLLocalDB
v11.0
PM> 

再結合我之前貼出的代碼:

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v13.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

發現版本號不一樣,於是改版本號為v11.0,然後執行:

PM> sqllocaldb create v11.0
已使用版本 11.0 創建 LocalDB 實例“v11.0”。

PM> 

再跑代碼,出現了和開頭一樣的錯誤,這說明使用預設連接和自定義連接字元串方式沒有多大不同

{"An exception occurred while initializing the database. See the InnerException for details."}

{"The underlying provider failed on Open."}

{"Cannot attach the file 'E:\\ProjectOwn\\PlantGarden\\MvcWeChat\\App_Data\\DefaultConnection.mdf' as database 'DefaultConnection'."}

image

四、考慮過程第三點

經過上面種種問題,我才意識到了文章開頭我補充的那句話:

出現原因:這個錯誤在CodeFirst第一次執行的時候是沒有問題的,當你刪除了CodeFirst自動生成的資料庫db文件,再重新嘗試運行就會出現問題了,不會再重新生成資料庫文件!

因為我發現,在我運行過程中,有過三次成功,都是第一次,一次是預設連接,一次是自定義連接,一次是修改了自定義連接資料庫名之後,於是於是,我再一次的修改了自定義連接資料庫名稱:

  <connectionStrings>
    <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MvcWeChatDb20160811;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcWeChatDb20160811.mdf" />
  </connectionStrings>

嘿嘿,可想而知,是可以成功的!

image

到這裡我意識到了一個問題,EntityFramework CodeFirst 機制:當資料庫存在時候連接存在的資料庫,當不存在時,建立資料庫,我使用的是 LocalDb 方式,雖然是刪除了資料庫文件,但是資料庫並沒有刪除啊!這是點到點了,那麼怎麼刪除 LocalDb 資料庫呢?

方式有兩種,SSDT模式和SSMS模式,

一、SSDT模式是 VS-》視圖-》SQL Server 對象資源管理器,直接通過管理器管理,當然如果你和我一樣運氣不好,只能使用第二種了

貌似是vs2015中的SSDT和vs2012中的SSDT版本衝突,我的VS2015中的可以用,vs2012中的不可以

image image

二、SSMS方式解決

和之前查看LocalDb版本命令一樣:SqlLocalDB

首先是命令介紹:

路徑:%ProgramFiles%\Microsoft SQL Server\110\Tools\Binn\SqlLocalDB.exe

image

使用方法:

CMD下

  1. Cd %ProgramFiles%\Microsoft SQL Server\110\Tools\Binn 
  2. SqlLocalDB /?

PM下:

直接使用 SqlLocalDB /?

通過使用 SqlLocalDB info 查看資料庫實例

PM> SqlLocalDB info
MSSQLLocalDB
ProjectsV13
v11.0
PM> 

找到對應的實例名稱v11.0,我們使用SSMS連接指定資料庫實例

image

image

到此為止後面的過程就不用在說了吧!只要找到對應資料庫刪除就好了,對於預設連接方式就是圖中所示的DefaultConnection了!

文章很長,也很臭,說了一大堆沒能解決問題的思路,但是這是我實際解決問題的思路,就當日誌吧!看看就好!

Log: 修改結構重新提交


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 說明: 原文作者賢新 原文地址:http://www.cnblogs.com/chenxinblogs/p/4852813.html ViewData和ViewBag主要用於將數據從控制器中傳遞到視圖中去,ViewData本身就是一個字典。以KeyValue的形式存取值。ViewData的Value ...
  • 本文版權,歸博客園和作者吳雙共同所有。轉載和爬蟲請註明博客園蝸牛Redis系列文章地址 http://www.cnblogs.com/tdws/tag/NoSql/ Redis數據類型之集合(Set)。 單個集合中最多允許存儲2的三十二次方減1個元素。內部使用hash table散列表實現。 SAD ...
  • 在 ASP.NET Core 中,有多種途徑可以對應用程式狀態進行管理,取決於檢索狀態的時機和方式。本文簡要介紹幾種可選的方式,並著重介紹為 ASP.NET Core 應用程式安裝並配置會話狀態支持。 ...
  • 這幾天沒有按照計劃分享技術博文,主要是去醫院了,這裡一想到在醫院經歷的種種,我真的有話要說;醫院里的醫務人員曾經被吹捧為美麗+和藹+可親的天使,在經受5天左右相互接觸後不得不讓感慨;遇見的有些人員在掛號隊伍猶如長龍的時候坐在收費視窗玩手機,理由是自己是換班的差幾分鐘才上班呢;遇見態度極其惡劣的主任醫 ...
  • 本文使用Asp.Net (C#)調用互聯網上公開的WebServices(http://www.webxml.com.cn/WebServices/WeatherWebService.asmx)來實現天氣預報,該天氣預報 Web 服務,數據來源於中國氣象局 http://www.cma.gov.cn ...
  • 信鴿推送官方sdk沒提供C#版的DEMO,考慮到應該有其他.NET的也會用到信鴿,下麵是我在使用信鴿過程中寫的demo。有什麼不對的地方,歡迎各位大牛指導。 ...
  • 今天學的新東西是WPF的模板,以後會學習更多關於WPF的東東的 ...
  • jquery easyui使用(四)······添加,編輯,刪除 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...