Subsonic的使用之基本語法、操作(2)


查詢
SubSonic2.1版本 – 例出3種查詢。
Product product = new Select().From<Product>()
              .Where(Product.ProductIDColumn).IsEqualTo(4)
  .ExecuteSingle<Product>();
Product product = DB.Select().From<Product>()
  .Where("ProductID").IsEqualTo(4)
  .ExecuteSingle<Product>();
Query query = new Query(Product.Schema);
query.WHERE("ProductID=4").ORDER_BY("ProductID asc");
IDataReader dr = Product.FetchByQuery(query);
DataSet product = new   Query(Product.Schema).WHERE("ProductID=4").
  ORDER_BY("Prod  uctID asc").ExecuteDataSet(); 
  
關聯查詢
DataSet product = new Select(
  Product.ProductNameColumn,
  Category.CategoryNameColumn
  ).From<Product>()
  .InnerJoin(Category.CategoryIDColumn, Product.CategoryIDColumn)
  .Where(Category.CategoryIDColumn).IsGreaterThan(4)
  .ExecuteDataSet(); 
注意. InnerJoin(f2, f1) 的使用方法。
分頁查詢
List<Product> products = new Select().From<Product>()
    .Where(Product.ProductIDColumn).IsEqualTo(4)
    .Paged(1, 30)
    .ExecuteTypedList<Product>();
分組
SubSonic.SqlQuery query = DB.Select(Aggregate.GroupBy("CompanyName"))
.From("Customers")
.LeftOuterJoin("Orders");

查詢—返回對象
ExecuteReader();   返回DataReader 
ExecuteScalar();   返回對象
ExecuteScalar<string>();  返回泛型對象
ExecuteSingle<Product>(); 返回表實體對象
ExecuteTypedList<Product>();  返回泛型表實休數據集
ExecuteDataSet();  返回DataSet 
ExecuteJoinedDataSet<強數型數據集>(); 返回關聯查詢 DataSet 
Execute(); 返回執行后,數據更新條數
  
SQL關鍵詞
IsEqualTo(obj) // 等於 value
IsBetweenAnd(obj1, obj2) // [字段1] BETWEEN 值1 AND 值2
StartsWith  // LIEK '1%‘ 
EndsWith    // LIEK '%1‘
IsGreaterThan // [字段1] > 值1
IsGreaterThanOrEqualToIsGreaterThan // [字段1] >= 值1
IsLessThan // [字段1] < 值1
IsLessThanOrEqualToIsLessThan // [字段1] <= 值1
WhereExpression / AndExpression // Expression 表示括號
C#:
.Where("1").IsGreaterThan(1)
  .And("2").IsGreaterThanOrEqualTo(2)
  .AndExpression("3").IsLessThan(3)
  .AndExpression("4").IsLessThanOrEqualTo(4).And("5").StartsWith("5")
  .AndExpression("6").EndsWith("6")
  .ExecuteSingle<Product>();
SQL:WHERE 1 > @1AND 2 >= @2 AND (3 < @3) AND (4 <= @4 AND 5 LIKE @5) AND (6 LIKE @6)
  
修改
Product product = new Product(4);
product.ProductName = "amo";
product.Save();
int i = new Update(Product.Schema)
  .Set(Product.ProductNameColumn).EqualTo("Chai -- Amo")
  .Where(Product.ProductIdColumn).IsEqualTo(1)
  .Execute();
  
添加
Product product = new Product();
product.ProductName = "my xiaoli";
product.SupplierID = 1;
product.CategoryID = 1;
product.Discontinued = true;
//............
product.Save();
int i = new Insert().Into(Product.Schema,
  "ProductName", 
  "SupplierID", 
  "CategoryID", 
  "Discontinued“
)
.Values("my amo", 1, 1, 1).Execute();
  
刪除
int i = new Delete ().From<Product>()
  .Where(Product.ProductIDColumn). IsEqualTo(1)
  .Execute();
//刪除
Query qr = EaiSmsCustom.Query().AddWhere("age", 1).AddWhere("name", 2);
qr.QueryType = QueryType.Delete;
qr.Execute();

  
事務1
 List<Insert> queries = new List<Insert>();
 queries.Add(new Insert().Into(Product.Schema).Values("product1"));
 queries.Add(new Insert().Into(Product.Schema).Values("product2"));
 queries.Add(new Insert().Into(Product.Schema).Values("product3"));
 queries.Add(new Insert().Into(Product.Schema).Values("product4"));
 queries.Add(new Insert().Into(Product.Schema).Values("product5"));
 queries.Add(new Insert().Into(Product.Schema).Values("product6"));
 queries.Add(new Insert().Into(Product.Schema).Values("product7"));
 //execute in a transaction 
 SqlQuery.ExecuteTransaction(queries);
事務2
using (SharedDbConnectionScope sp = new SharedDbConnectionScope())
{
    using (TransactionScope scope = new TransactionScope())
    {
        // coding....
        scope.Complete();
    }
} 
  
減少對ActiveRecord的依賴 
MyProduct product = new Select(
  Product.ProductNameColumn, 
  Category.CategoryNameColumn
    ).From<Product>()
   .InnerJoin(Category.CategoryIDColumn, Product.CategoryIDColumn)
   .Where(Category.CategoryIDColumn).IsGreaterThan(4)
   .ExecuteSingle<MyProduct>();
string cname = product.CategoryName; 
string pname = product.ProductName;
  
自定義MyProduct實體類 
 public class MyProduct : ActiveRecord<MyProduct> {
        public string CategoryName {
            get { return GetColumnValue<string>(Category.Columns.CategoryName); }
            set { SetColumnValue(Category.Columns.CategoryName, value); }
        }
        public string ProductName {
            get { return GetColumnValue<string>(Product.Columns.ProductName); }
            set { SetColumnValue(Product.Columns.ProductName, value); }
        }
}

string str=DB.Select(EaiService.NameColumn).Top("1").From<EaiService>.Where(EaiService.NameColumn).IsEquealTo(name).ExecuteScalar<string>();


string str = DB.Select(Aggregate.Count(EaiUserMap.ApplicationColumn, "Count")).From<EaiUserMap>().ExecuteScalar<string>();


                EaiService es = DB.Select().From<EaiService>()
                .Where(EaiService.ApplicationColumn).IsEqualTo(title)
                .ExecuteSingle<EaiService>();
                if (es != null)
                {
                    bt = es.ServiceNameS.ToString();
                }

//刪除
Query qr = EaiSmsCustom.Query().AddWhere("age", 1).AddWhere("name", 2);
qr.QueryType = QueryType.Delete;
qr.Execute();

存儲過程調用
以下是利用SubSonic2.0使用該存儲過程的代碼:
-----------------------------------代碼開始------------------------------------
public static int GetRUID(string tblName)
{
StoredProcedure spd = new StoredProcedure("GenerateRUID");
spd.Command.AddParameter("@tblName", tblName);
spd.Command.AddOutputParameter("@currentnumber");
spd.Execute();
int currentnumber = int.Parse(spd.OutputValues[0].ToString());
return currentnumber;
}
Subsonic的使用之基本語法、操作(2)
新增、修改:
Subsonic中的新增和修改可以共享一個方法(InsertOrUpdate):
user.InsertOrUpdate(); //其中user是傳入的用戶實體
return user.Fid;
當然它們也有自己獨立的方法:
² 新增:
notice.Save();//其中notice是傳入的公告實體
return NoticeId = notice.Fid;
² 修改
int i = new Update(CyReceiver.Schema)
.Set(CyReceiver.FStateColumn).EqualTo(1)
.Where(CyReceiver.FNoticeIDColumn).IsEqualTo(noticeId)
.And(CyReceiver.FUserIDColumn).IsEqualTo(userId).Execute();
刪除:
DB.Delete().From(CyUser.Schema).Where(CyUser.FidColumn).IsEqualTo(id).Execute();
SQL關鍵詞:
Select、Delete、Insert、Update、Form、Where這些和SQL一樣的就不解釋了 
IsEqualTo:where條件中的“等於”
如:Where(CyReceiver.FNoticeIDColumn).IsEqualTo(noticeId)
IsNotEqualTo: where條件中的“不等於”
EqualTo:set語句中的“等於” 如: Set(CyReceiver.FStateColumn).EqualTo(1)
IsGreaterThan :where中的“大於” 
IsGreaterThanOrEqualTo:大於等於
IsLessThan:where中的“小於”
IsLessThan OrEqualTo:小於等於
IsBetweenAnd:區間
如:Where(CyNotice.FBeginDateTimeColumn).IsBetweenAnd(beginDate, endDate)
OrderAsc:按某字段升序排序 如:OrderAsc(CyUser.Columns.FUsersSort)
OrderDesc: 按某字段降序序排序
And:邏輯中的“且”
Or: 邏輯中的“或”
Like:模糊查詢關鍵詞 
如:And(CyNotice.FTitleColumn).Like("%" + model.Title + "%")
更常用的是:title=string.Format("%{0}%", model.Title);
And(CyNotice.FTitleColumn).Like(title);
LeftOuterJoin:左外連接 (當然還有RightOuterJoin、Joins、LeftInnerJoin等等)
如:From(CyNotice.Schema)
.LeftOuterJoin(CyUser.FidColumn, CyNotice.FUserIDColumn)
簡單的Update使用save方法 沒有用到update:
Product product =new Product("Id",1);
product.Name="Eason";
product.save();
復雜一點的,就要用到 Update :
Update product= new Update(product.Schema.TableName); 
product.From(product.Schema.TableName);
product.Where(product.Columns.id).Like(1);
product.And(product.Columns.Name).Like(“Eason”);
product.Set(product.Columns.Name).EqualTo(“Hanson Eason”);
product.Execute();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM