Exemplo n.º 1
0
        internal List <UserEntity> GetList()
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();


                var param = new
                {
                    // IN句に並べたい値をリストとして積んでやる
                    AgeList = new List <int>()
                    {
                        20, 38
                    }
                };

                // 上ではジェネリックリストにしているが、配列でもOK
                //var param = new
                //{
                //    AgeList = new int[] { 20, 38 }
                //};


                return(cn.Query <UserEntity>("SELECT * FROM Users WHERE Age IN @AgeList ORDER BY ID", param).ToList());
            }
        }
Exemplo n.º 2
0
        // transactionを開始して、commitして正常に終わるパターンの例
        internal void UpdateCommitOK(UserEntity data)
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // 通常のADO.NETと同様、トランザクションを開始する
                var tr = cn.BeginTransaction();

                try
                {
                    // Execute拡張メソッドの第三引数:transactionに開始したトランザクションをセット
                    cn.Execute(" UPDATE Users " +
                               " SET " +
                               "     FirstName = @FirstName , " +
                               "     LastName = @LastName , " +
                               "     Email = @Email , " +
                               "     Age = @Age " +
                               " WHERE " +
                               "     Id = @ID ",
                               data,
                               tr);

                    // 通常通り、コミットすればOK
                    tr.Commit();
                }
                catch (Exception)
                {
                    // 例外の場合等は、ロールバックする。
                    tr.Rollback();
                }
            }
        }
Exemplo n.º 3
0
 internal UserEntity GetDetail(int Id)
 {
     using (var cn = DbConnectionUtil.GetConnection())
     {
         cn.Open();
         return(cn.Query <UserEntity>("SELECT * FROM Users WHERE Id = @ID ", new { ID = Id }).FirstOrDefault());
     }
 }
Exemplo n.º 4
0
 internal List <UserEntity> GetList()
 {
     using (var cn = DbConnectionUtil.GetConnection())
     {
         cn.Open();
         return(cn.Query <UserEntity>("SELECT * FROM Users ORDER BY ID").ToList());
     }
 }
Exemplo n.º 5
0
        internal int GetCount()
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // スカラ値を取得する例
                return(cn.Query <int>("SELECT Count(*) FROM Users").Single());
            }
        }
        internal void UpdateMultiRow()
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // リストを作って渡してやる
                var param = new List <UserEntity>()
                {
                    new UserEntity()
                    {
                        FirstName = "氏1111",
                        LastName  = "名1111",
                        Age       = 11
                    },
                    new UserEntity()
                    {
                        FirstName = "氏22222",
                        LastName  = "名22222",
                        Age       = 22
                    },
                    new UserEntity()
                    {
                        FirstName = "氏33333",
                        LastName  = "名33333",
                        Age       = 33
                    },
                };

                // 配列でもOK
                //var param = new[]
                //{
                //  new
                //  {
                //      FirstName = "氏1111",
                //      LastName = "名1111",
                //      Age = 11
                //  },
                //  new
                //  {
                //      FirstName = "氏22222",
                //      LastName = "名22222",
                //      Age = 22
                //  },
                //  new
                //  {
                //      FirstName = "氏33333",
                //      LastName = "名33333",
                //      Age = 33
                //  },
                //};

                cn.Execute("UPDATE Users SET FirstName = @FirstName , LastName = @LastName WHERE Age = @Age ", param);
            }
        }
Exemplo n.º 7
0
        internal List <UserEntity> GetListByRecord()
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // SQL Serverのストアドでレコードが帰ってくる場合、普通にQuery拡張メソッドを実行すれば良い。
                // (commandTypeは一応書いているが、省略しても多分通る。)
                return(cn.Query <UserEntity>("GetOlderUserByRecordProc", new { baseAge = 24 }, commandType: System.Data.CommandType.StoredProcedure).ToList());
            }
        }
        internal List <UserEntity> GetList()
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // Query拡張メソッドに型引数を渡すと、その型にマッピングする。
                // 戻り値はIEnumerable<UserEntity>となる
                return(cn.Query <UserEntity>("SELECT * FROM Users ORDER BY ID").ToList());
            }
        }
Exemplo n.º 9
0
 internal void Delete(int id)
 {
     using (var cn = DbConnectionUtil.GetConnection())
     {
         cn.Open();
         cn.Execute(" DELETE Users " +
                    " WHERE " +
                    "     Id = @ID ",
                    new { ID = id });
     }
 }
Exemplo n.º 10
0
        internal UserEntity GetDetail(int Id)
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // パラメタライズドクエリでパラメータを設定する場合、
                // 第二引数(param)に『バインド変数名と同じ名前のメンバ』を持ったオブジェクトを渡す。
                // この例のように、匿名オブジェクトでもOK。
                return(cn.Query <UserEntity>("SELECT * FROM Users WHERE Id = @ID ", new { ID = Id }).FirstOrDefault());
            }
        }
Exemplo n.º 11
0
        internal List <dynamic> GetList()
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // Query拡張メソッドで型引数を指定しない。
                // 戻り値はIEnumerable<dynamic>となる
                // dynamicの中身(?)は、クエリ結果のカラムと同名/同型のメンバを持ったオブジェクトとなる。
                return(cn.Query("SELECT Id, FirstName , LastName ,Email , Age FROM Users ORDER BY Id").ToList());
            }
        }
Exemplo n.º 12
0
        internal int GetCountByOutParam()
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // 基本的にはGetCountByReturn()のケースと同様。
                // outputパラメータで値を受け取る場合は引数directionにSystem.Data.ParameterDirection.Outputを設定。
                var param = new DynamicParameters(new { baseAge = 24 });
                param.Add("count", 0, direction: System.Data.ParameterDirection.Output);
                cn.Execute("GetCountOlderByOutputParamProc", param, commandType: System.Data.CommandType.StoredProcedure);
                return(param.Get <int>("count"));
            }
        }
Exemplo n.º 13
0
        internal void Create(UserEntity data)
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // パラメタライズドクエリでパラメータを設定する場合、その3.
                // バインドに使用しないメンバが存在しても問題ない
                // (今回の場合、data.IDは使用しない為不要だが、あってもエラーにならない
                cn.Execute(" INSERT INTO Users " +
                           "  (FirstName , LastName , Email , Age) " +
                           " VALUES " +
                           "  (@FirstName , @LastName , @Email, @Age )",
                           data);
            }
        }
Exemplo n.º 14
0
        internal List <UserFavoriteBookEntity> GetRecords1()
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // 型引数を複数与える。
                // 型引数には、SELECT句の前から順に、カラムをマップする方を指定。
                // (splitOn引数で指定した名前のカラムで分割し、それぞれの型にマップする。)
                // 最後の型引数は、最終的に返却する型を指定する。
                //
                // map引数には、マッピングするアルゴリズムをラムダで記述する。
                // 引数の型と数と順番は、Query拡張メソッドの型引数で指定した順(最後の一つは除く)
                // ラムダ式の戻り値は、Query拡張メソッドの型引数の最後に指定したものになるようにする。
                //
                // splitOnには結果列の区切りなるカラム名を指定する。
                // 複数ある場合は、カンマで区切る。
                // 同名であっても数が合っていればよしなにやってくれる。
                var ret = cn.Query <UserFavoriteBookEntity, UserEntity, BooksEntity, UserFavoriteBookEntity>(
                    " SELECT " +
                    "     f.Id, " +
                    "     u.Id, " +
                    "     u.FirstName, " +
                    "     u.LastName, " +
                    "     u.Email, " +
                    "     u.Age, " +
                    "     b.Id, " +
                    "     b.Name " +
                    " FROM " +
                    "     UserFavoriteBook f left join " +
                    "         Users u on f.UserID = u.Id Left Join  " +
                    "             Books b on f.BookID = b.id",
                    map: (uf, user, book) =>
                {
                    uf.User        = user;
                    uf.InterstBook = book;
                    return(uf);
                },
                    splitOn: "Id,Id"
                    ).ToList();

                return(ret);
            }
        }
Exemplo n.º 15
0
        internal void Update(UserEntity data)
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // パラメタライズドクエリでパラメータを設定する場合、その2.
                // 当然、匿名型ではなく名前を持った型も設定可能.
                //
                // なお、UPDATE/INSERT/DELETE等、結果列を返さないクエリの実行はExecute拡張メソッドを利用する。
                cn.Execute(" UPDATE Users " +
                           " SET " +
                           "     FirstName = @FirstName , " +
                           "     LastName = @LastName , " +
                           "     Email = @Email , " +
                           "     Age = @Age " +
                           " WHERE " +
                           "     Id = @ID ",
                           data);
            }
        }
Exemplo n.º 16
0
        internal int GetCountByReturn()
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // パラメータにIN/OUT等細かな設定が必要な場合は、
                // DynamicParametersのインスタンスを作ってそこに設定してやればよい模様。

                // 細かな設定が要らないパラメータ(入力専用等)は、コンストラクタに纏めて渡してやればよさそう
                var param = new DynamicParameters(new { baseAge = 24 });

                // 値の受け取りなど個別の設定が必要な場合は、一つ一つ設定。
                // 設定内容は、System.Data.Common.DbParameterに設定する内容に準じる。
                // ストアドの戻り値を受け取る場合は、引数directionにSystem.Data.ParameterDirection.ReturnValueを設定。
                param.Add("result", 0, direction: System.Data.ParameterDirection.ReturnValue);

                // Execute拡張メソッドで実行。引数commandTypeにSystem.Data.CommandType.StoredProcedureを設定してやる。
                cn.Execute("GetCountOlderByRerutnProc", param, commandType: System.Data.CommandType.StoredProcedure);

                return(param.Get <int>("result"));
            }
        }
Exemplo n.º 17
0
        internal void InsertMultiRow()
        {
            using (var cn = DbConnectionUtil.GetConnection())
            {
                cn.Open();

                // リストを作って渡してやる
                var param = new List <UserEntity>()
                {
                    new UserEntity()
                    {
                        FirstName = "氏1",
                        LastName  = "名1",
                        Email     = "*****@*****.**",
                        Age       = 11
                    },
                    new UserEntity()
                    {
                        FirstName = "氏2",
                        LastName  = "名2",
                        Email     = "*****@*****.**",
                        Age       = 22
                    },
                    new UserEntity()
                    {
                        FirstName = "氏3",
                        LastName  = "名3",
                        Email     = "*****@*****.**",
                        Age       = 33
                    },
                };

                // 配列でもOK
                //var param = new[]
                //{
                //  new
                //  {
                //      FirstName = "氏1",
                //      LastName = "名1",
                //      Email = "*****@*****.**",
                //      Age = 11
                //  },
                //  new
                //  {
                //      FirstName = "氏2",
                //      LastName = "名2",
                //      Email = "*****@*****.**",
                //      Age = 22
                //  },
                //  new
                //  {
                //      FirstName = "氏3",
                //      LastName = "名3",
                //      Email = "*****@*****.**",
                //      Age = 33
                //  },
                //};

                cn.Execute("INSERT INTO Users (FirstName,LastName,Email,Age ) VALUES (@FirstName,@LastName,@Email,@Age)  ", param);
            }
        }