I. SQLとストアドプロシージャの使用
1) List<Dictionary<string, MObject>> の使用
1.sqlを使用し、本来の感覚を体験してください。
string sql="select * from Class where ClassName = @";
string sql2="select * from Class where DateTimem = @";
List<Dictionary<string, MObject>> mylist=db.ExecuteSqlToDictionaryList(sql,"boy'");
List<Dictionary<string, MObject>> mylist2=db.ExecuteSqlToDictionaryList(sql2,DateTime.Parse("2013-10-10 14:40:08"));
foreach(var oneClass in mylist){
string className=oneClass["className"].To<string>();
long id=oneClass["Classid"].To<long>();
DateTime datetimem=oneClass["datetimem"].To<DateTime>();//大文字と小文字を区別しない
Console.WriteLine(className+" "+id+" "+datetimem);
}
2.mqlの使用、理性的な認識は優雅な経験をもたらします
var list=db.GetDictionaryList(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(0)))
2) MQLフルコンタクト
2.1 MQLの標準クエリー
var mm=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName).
Where(ClassSet.ClassName.Contains("s").And(ClassSet.ClassID.BiggerThan(9)));
SELECT [Class].[ClassID],[Class].[ClassName] FROM [Class] WHERE [Class].[ClassName] LIKE @p1 AND [Class].[ClassID]>@p2
@p1=%s%
@p2=9
2.2 MQLの入れ子クエリ
var qiantao=ScoreSet.SelectAll().Where(
ScoreSet.UserID.In(UserSet.Select(UserSet.UserID).Where(
UserSet.ClassID.In(
ClassSet.Select(ClassSet.ClassID).Where(
ClassSet.ClassName.Equal(c.ClassName).And(ClassSet.ClassID.BiggerThan(0))
)
)
)
)
).Top(1);
SELECT TOP 1 [Score].* FROM [Score] WHERE [Score].[UserID] IN (SELECT [User].[UserID] FROM [User] WHERE [User].[ClassID] IN (SELECT [Class].[ClassID] FROM [Class] WHERE [Class].[ClassName]=@p1 AND [Class].[ClassID]>@p2 ) )
@p1=総合テスト ClassName2
@p2=0
2.3 MQLのグループクエリ
var mql=ScoreSet.Select(ScoreSet.ScoreM.Sum().AS("sum"),ScoreSet.TypeName).
Where(ScoreSet.ScoreM.BiggerThanOrEqual(100)).
GroupBy(ScoreSet.TypeName).
Having(ScoreSet.ScoreM.Sum().BiggerThan(300));
SELECT SUM([Score].[ScoreM]) AS 'sum',[Score].[TypeName] FROM [Score] WHERE [Score].[ScoreM]>=@p1 GROUP BY [Score].[TypeName] HAVING SUM([Score].[ScoreM])>@p2
@p1=100
@p2=300
2.4 MQL結合クエリ
var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName)
.LeftJoin(
UserSet.Select(UserSet.UserID))
.ON(ClassSet.ClassID.Equal(UserSet.UserID))
.Where(UserSet.UserID.BiggerThan(9));
SELECT [Class].[ClassID],[Class].[ClassName],[User].[UserID] FROM [Class] LEFT JOIN [User] ON [Class].[ClassID]=[User].[UserID] WHERE [User].[UserID]>@p1
@p1=9
2.5 MQLのユニオン・クエリー
var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))
.Union(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));
var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))
.UnionAll(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));
SELECT [Class].* FROM [Class] WHERE [Class].[ClassID]>@p1 UNION SELECT [Class].* FROM [Class] WHERE [Class].[ClassID]>@p2
@p1=1
@p2=2
SELECT [Class].* FROM [Class] WHERE [Class].[ClassID]>@p1 UNION ALL SELECT [Class].* FROM [Class] WHERE [Class].[ClassID]>@p2
@p1=1
@p2=2
2.6 MQLの使い方のプレビュー
public static void Main(string[] args)
{
using (var db=Db.CreateDefaultDb()) {
db.TransactionEnabled=true;
db.DebugEnabled=true;
Console.WriteLine("---------------入れ子のクエリー ---------------------");
var qiantao=ScoreSet.SelectAll().Where(
ScoreSet.UserID.In(UserSet.Select(UserSet.UserID).Where(
UserSet.ClassID.In(
ClassSet.Select(ClassSet.ClassID).Where(
ClassSet.ClassName.Equal(c.ClassName).And(ClassSet.ClassID.BiggerThan(0))
)
)
)
)
).Top(1);
Console.WriteLine("---------------クエリをグループ化する ---------------------");
var mql=ScoreSet.Select(ScoreSet.ScoreM.Sum().AS("sum"),ScoreSet.TypeName).Where(ScoreSet.ScoreM.BiggerThanOrEqual(100)).GroupBy(ScoreSet.TypeName).Having(ScoreSet.ScoreM.Sum().BiggerThan(300));
Console.WriteLine("---------------接続クエリー ---------------------");
var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName)
.LeftJoin(
UserSet.Select(UserSet.UserID))
.ON(ClassSet.ClassID.Equal(UserSet.UserID))
.Where(UserSet.UserID.BiggerThan(9));
}
Console.WriteLine("---------------Unionテスト ---------------------");
using (var db=Db.CreateDefaultDb()) {
db.TransactionEnabled=true;
db.DebugEnabled=true;
var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))
.Union(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));
}
}
3) データセットの使用
1.ストアドプロシージャの使用
DataSet dataset=db.ExecuteProToDataSet("プロシージャ名",パラメータ1,パラメータ2);
2.sqlの使用
DataSet dataset=db.ExecuteSqlToDataSet(sql,"boy");
3.mqlの使用
DataSet dataset=db.GetDataSet(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(0)));
4) xmlを使用したSQLクエリの設定
1.コンフィグノードの設定
<appSettings>
<add key="SQL_XML_FILE_NAME" value="C:\Moon\Moon.Orm\sql.xml"></add>//フルパスでない場合、デフォルトはdll生成ディレクトリにある。
</appSettings>
2.構成 xml (sql.xml)
<?xml version="1.0"?>
<sqls>
<sqlxml id="getname">
<sql>select name from user where id>@</Sql>
<description>ユーザー名を照会る</Description>
</sqlxml>
</sqls>
3.クエリにidを使用
var list=db.GetDictionaryList(XmlHelper.GetSqlXmlByID("getname"),"boy");
5) キング・オブ・SQLの帰還
GetDynamicList を使用して、別の種類の自由を体験してください!
object, .net 4.0以下では、dynamicを使って直接値を取り出すことができる。.
string sql22="select * from Score";
dynamic list22=db.GetDynamicList(sql22,"Score");
foreach(var a in list22){
Console.WriteLine(a.ID+"--"+a.ScoreM+"--"+a.UserID+"--"+a.TypeName);//すべて強い型である
}
経験豊富なストロングタイプはこちら)





