程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 在C#中建立復雜的、靈活的SQL查詢/命令(2)

在C#中建立復雜的、靈活的SQL查詢/命令(2)

編輯:關於C語言

SelectQueryBuilder方式的代碼

同樣的查詢能夠使用SelectQueryBuilder類建立。

SelectQueryBuilder query = new SelectQueryBuilder();
query.SelectFromTable("Customers");
query.SelectAllColumns();
query.TopRecords = maxRecords;
if (companyNameTextBox.Text.Length > 0)
 query.AddWhere("CompanyName", Comparison.Like,companyNameTextBox.Text + "%");
 if (cityTextBox.Text.Length > 0)
  query.AddWhere("City", Comparison.Like,
  cityTextBox.Text + "%");
 if (countryComboBox.SelectedItem != null)
  query.AddWhere("Country", Comparison.Equals,
  countryComboBox.SelectedItem);
  string statement = query.BuildQuery();
  // or, have a DbCommand object built
  // for even more safety against SQL Injection attacks:
  query.SetDbProviderFactory(
  DbProviderFactorIEs.GetFactory(
  "System.Data.SqlClIEnt"));
  DbCommand command = query.BuildCommand();

你能看到,這種方式比直接使用連接字符串更直觀。考慮到第一個例子SQL注入的危險,通過SelectQueryBuilder建立的SELECT查詢是非常安全的,並不用擔心使用的TextBoxs中的內容。事實上它也非常簡單!

使用SQL函數

如果你想在你的查詢中使用SQL函數,你能使用SqlLiteral類來打包函數的調用。說明這個類能作什麼的最好方式就是給你顯示一小段代碼例子:

SelectQueryBuilder query = new SelectQueryBuilder();
query.SelectFromTable("Orders");
query.AddWhere("OrderDate", Comparison.LessOrEquals,new SqlLiteral("getDate()"));

如果我們沒有打包getDate()函數調用到SqlLiteral類中,建立的查詢就會產生WHERE子句:OrderDate<=’getDate()’。當然,我們希望在語句中的這個函數沒有被單引號包圍。這時SqlLiteral就可以派上用場了:它直接拷貝字符串到輸出,並沒有把它格式化成字符串。現在的輸出WHERE子句應當是OrderDate<=getDate()!

查詢中使用JOINs

要創建到其它表的JOINs,你能使用AddJoin方法。下面的代碼顯示了如何創建一個從Ordres表到Customers表的INNER JOIN。

SelectQueryBuilder query = new SelectQueryBuilder();
query.SelectFromTable("Orders");
query.AddJoin(JoinType.InnerJoin,"Customers", "CustomerID",Comparison.Equals,"Orders", "CustomerID");
query.AddWhere("Customers.City",Comparison.Equals, "London");

這段代碼選擇所有居住在London的客戶的訂單。一旦調用了BuildQuery方法,就會產生下面的SQL語句:

SELECT Orders.*
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID
WHERE (Customers.City = 'London')

注意到缺省的查詢只會建立所選擇的表的selects * 語句(這個例子中的Orders.*)。如果你也想選擇連接表的列的話,你必須得顯式地選擇它們。你能通用調用query.SelectColumns(“Orders.*”,”Customers.*”)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved