最后效果如下,源碼見最后:
用於測試docker 部署的ASP.NET 和SQL Server的連接,對c#小白有用,大牛飄過。
一、創建asp.net空網站
二、准備數據庫
打開Sql Server 2008,創建test數據庫,創建如下表:
create table users ( id int identity(1,1) not null primary key, name nvarchar(50) null, age nvarchar(50) null, ) go
點擊Visual Studio中"工具"菜單下的"連接到數據庫",選擇"Microsoft SQL Server"作為數據源。
確定繼續
三、使用Web.config配置數據庫連接
打開"服務器資源管理器",如下:
右鍵"服務器資源管理器",點擊"屬性",復制連接字符串“Data Source=xxx.xxx.cn,9000;Initial Catalog=test;User ID=sa;Password=xxxx;”。
粘帖到Web.config中的connectionStrings節點下。數據庫名保持一致為test
<connectionStrings> <add name="MyDB" connectionString="Data Source=xxx.xxx.cn,9000;Initial Catalog=test;User ID=sa;Password=xxxx;;" providerName="System.Data.SqlClient" /> </connectionStrings>
后面數據庫連接代碼如下:
conn = new SqlConnection(); //conn.ConnectionString = "Data Source=xxx.xxx.cn,9000;Initial Catalog=test;User ID=sa;Password=xxxx;"; conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString;
注意:如果不使用Web.config方式的話,上述代碼只需要注釋部分和前一句。
四、代碼
在項目里面新建"web窗體",命名為test,出現test.aspx和test.aspx.cs。修改test.aspx里的代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <table runat="server" id="table1"> <tr> <td>name:</td> <td> <asp:TextBox ID="tbName" runat="server"></asp:TextBox> </td> </tr> <tr> <td>age:</td> <td> <asp:TextBox ID="tbAge" runat="server"></asp:TextBox> </td> </tr> <tr> <td><asp:Button runat="server" ID="BtnAdd" text="add" OnClick="BtnAdd_Click"/></td> <td><asp:Button runat="server" ID="BtnDel" text="del" OnClick="BtnDel_Click"/></td> <td><asp:Button runat="server" ID="BtnUpdate" text="update" OnClick="BtnUpdate_Click"/></td> <td><asp:Button runat="server" ID="BtnSelect" text="select" OnClick="BtnSelect_Click"/></td> </tr> </table> </form> </body> </html>
這段代碼中只有一個table,里面包含兩個textbox用於顯示name和age,還有四個按鈕,分別用於增刪改查,這6個控件都是asp標簽,和正常的html標簽類似,只不過多了一些ASP.NET封裝的屬性,方便與后台通信,后台可以通過其屬性runat="server"知道控件運行於服務器,然后通過id即可訪問到該控件,進而控制控件各種屬性和顯示。
下面是test.aspx.cs的代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Data.Sql; using System.Data; public partial class test : System.Web.UI.Page { //數據連接最基本需要的兩個對象 private SqlConnection conn = null; private SqlCommand cmd = null; //private SqlDataAdapter adapter = null; //為了方便,設為全局對象的sql語句 private string sql = null; //公用 打開數據庫的方法 public void openDatabase() { conn = new SqlConnection(); //conn.ConnectionString = "Data Source=xxx.xxx.cn,9000;Initial Catalog=test;User ID=sa;Password=xxxx;"; conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString; if (conn.State == ConnectionState.Closed) { conn.Open(); Response.Write("<script>alert('Success!');</script>"); } } //默認加載頁面的方法 找到年齡最大的加載 //有些問題,年齡不能相同,加載中前台的textbox里只能顯示一條記錄,數據拿到之后有多條只顯示一條 public void load() { openDatabase(); cmd = new SqlCommand("select * from users where age=(select max(age) from users)", conn); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { tbName.Text = (String)dr[1].ToString().Trim(); tbAge.Text = (String)dr[2].ToString().Trim(); } conn.Close(); } //根據sql語句加載信息,重載兩個textbox public void load(String sql) { openDatabase(); cmd = new SqlCommand(sql, conn); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { tbName.Text = (String)dr[1].ToString().Trim(); tbAge.Text = (String)dr[2].ToString().Trim(); } conn.Close(); } //封裝的數據庫語句執行的方法 public void execute(String sql) { openDatabase(); cmd = new SqlCommand(sql, conn); cmd.ExecuteNonQuery(); conn.Close(); } //頁面加載時ASP.NET首先會調用這個方法 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { load(); }//如果頁面不是刷新,則執行,這個很重要 } //四個按鈕的方法,增刪改查 protected void BtnAdd_Click(object sender, EventArgs e) { sql = "insert into users(name,age) values('" + tbName.Text.ToString().Trim() + "','" + tbAge.Text.ToString().Trim() + "')"; execute(sql); } protected void BtnDel_Click(object sender, EventArgs e) { sql = "delete from users where name='" + tbName.Text.ToString().Trim() + "' and age='" + tbAge.Text.ToString().Trim() + "'"; execute(sql); load(); } protected void BtnUpdate_Click(object sender, EventArgs e) { sql = "update users set age='" + tbAge.Text.ToString().Trim() + "' where name='" + tbName.Text.ToString().Trim() + "'"; execute(sql); } protected void BtnSelect_Click(object sender, EventArgs e) { sql = "select * from users where name='" + tbName.Text.ToString().Trim() + "'"; load(sql); } }
五,測試
六,發布
右鍵項目名稱–>發布Web應用–>配置文件–>自定義–>寫入配置文件名稱(自己可以隨意寫)–>連接–>
發布方法(選擇文件系統),目標位置為你想把該項目所要發布的內容存入的文件夾,當然這個文件也可以是你建立這個項目的文件夾
->下一頁–>點擊文件發布選項–>選擇在發布期間預編譯–>點擊配置–>在彈出的高級預編譯設置中,將允許更新預編譯站點不要勾選。
–>點擊發布。這樣發布Web應用成功
[注意:]更新預編譯站點勾不勾選后產生的效果:
①給“允許更新此預編譯站點”打√
整個網站文件,除了所有的CS文件編譯成一個DLL文件之外,其它文件,和原來沒有任何變化,也就是別人可以直接查看你的源代碼,源文件。
除此之外,這種方式發布的網站,當用戶第一次訪問頁面的時候,需要經過編譯,查找BUG,之后沒有任何錯誤,才能正常訪問,因此速度很慢很慢,
(第二,第三,第四次之后就正常了)
②取消“允許更新此預編譯站點”前面的√
1、網站里面的所有CS文件,都被編譯成為一個DLL文件;
2、除了cs文件,其它的文件,諸如ASPX、ASHX等文件,也一同被編譯起來,每個文件都在BIN目錄里面生成一個對應 的*.compiled文件;
之后,如果您通過記事本查看ASPX、ASHX等文件,里面不會看到任何的代碼,就連HTML代碼標記都看不見,打開這樣的文件,里面只有一行 文字,內容為“這是預編譯工具生成的標記文件,不應被刪除!”但是,網站的訪問卻是正常的,不會出現任何不良的問題。
此外,通過此種方法發布的網站,所有內容都編譯好了,打開的速度是很快的。
六,源文件
點擊下載 (連接字符串請自行替代,test.aspx設為起始頁)。