Asp.NetCore可以說是.Net平台開發網站的一大利器,最近的一大段時間,就要跟大家分享,如何使用這一利器開發網站項目。
要學習網站開發,首先要學習如何使用ADO.Net進行數據庫數據的增刪改查。這一節就先從Ado.net開始。
.Net平台已經封裝好了一套操作數據庫的流程(Ado.net),我們只需拿來即用即可,我們以連接SQL Server為例,首先要引用命名空間:
using System.Data.SqlClient;
該命名空間位於using System.Data下,我們要用它去連接SQL server的話,就要引用其SqlClient這個包。使用其連接數據庫也很簡單,我們先來看普通版,需要用到兩個類:
SqlConnection 和 SqlCommand 一個類負責連接,一個類負責執行sql語句
請看如下代碼:
using(SqlConnection connection=new SqlConnection("ConnectionString"))
{
using (SqlCommand command=new SqlCommand(T-Sql, connection))
{
command.Parameters.AddRange(pms);
connection.Open();
return command.ExecuteNonQuery();
}
}
首先,實例化連接對象,該對象的構造方法可以接收一個參數,這個參數就是數據庫連接字符串,除了構造傳參之外,我們也可以通過以下方式為其賦值。
connection.ConnectionString="ConnectionString";
實例化連接對象以后,接着實例化執行對象,該對象的構造需要sql語句和連接對象,同樣的,也可以用屬性賦值的方式實現這一操作,另外,如果語句中含有sql參數(實際上,為了防止sql注入,使用sql參數是必要的。),還要使用SqlParameter類,生成參數對象,並賦值。
SqlParameter parameter=new SqlParameter("@cunumber", customernumber);//參數名,實際值
如果是單個值,可以通過commond.parameters.Add()方法添加,或者使用AddRange()添加參數數組。
執行方法最常用的就三種,一種服務於查,一種服務於增刪改,一種服務於執行聚合函數的語句。
command.ExecuteReader();//執行查,返回SqlDataReader對象,通過該對象可以遍歷獲取所有查詢到的數據
command.ExecuteNonQuery();//執行增刪改,返回int(也就是受影響的行數)
command.ExecuteScalar();//執行帶聚合函數的語句,返回object
第2,3種的返回值可以直接使用,這里不再演示,下面講解一下,如何使用返回的SqlDataReader對象遍歷查詢到的數據。
SqlDataReader reader = comm.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
reader[0];//獲取本行第一列數據
reader.GetString(1);//獲取第二列數據,以string類型讀取
}
這個對象有一個屬性,HasRows,該bool值反映此次查詢是否查到了值。它的read()方法是讀取下一條數據,返回一個bool值,當讀取到最后一行以后,返回false,通常的用法就是判斷是否有值,如果有值就用while循環讀取數據,讀取數據使用reader[索引]的形式,或者使用reader.Get[Type]的形式。
使用完畢后,要調用連接對象的Close()方法,關閉連接,並且最好再調用Dispose()方法釋放掉連接。若使用using,則系統會自動釋放。
有些時候,我們需要一次性更改多個表中的數據,一條執行失敗就要回滾數據,這就要用到ADO.Net中的事務:
using (SqlConnection connection = new SqlConnection(connectionString))
{ connection.Open();
//創建一個命令對象 using (SqlCommand command = connection.CreateCommand())
{
//創建一個事務對象 using (SqlTransaction transaction = connection.BeginTransaction())
{
try
{
//傳入連接對象
command.Connection = connection;
//傳入事務對象
command.Transaction = transaction;
//添加參數
command.Parameters.AddRange(parameters);
//執行事務
for (int i = 0; i < commStrings.Length; i++)
{
//賦值sql語句,執行,下一循環,執行下一條語句
command.CommandText = commStrings[i];
if (command.ExecuteNonQuery() == 0)
{
throw new Exception("執行異常");
}
}
//沒有問題直接提交事務
transaction.Commit();
return 1;
}
catch (Exception e)
{
//出了問題就回滾事務
transaction.Rollback();
return 0;
}
}
}
事務的用法也很簡單,請讀者仔細閱讀代碼,此處不再贅述,另外需要注意一點,執行的多條命令,公用傳入的這一組參數,不要重復傳參。