4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ひとりでAdvent Calendar 2019

Day 3

C# NuGetパッケージ

Last updated at Posted at 2019-12-02

####対象読者
C#初心者だけど、少しコード分かる。

####NuGetとは?
外部パッケージを取得するためのシステム。取得することによって外部パッケージが使えるようになる。

####具体的に
macになるが、プロジェクトのManager NuGet Packagesって書かれたところをクリックすると下画像のようなものが出てくる。

スクリーンショット 2019-12-01 16.30.51.png

ここでダウンロードしたいものを選択。一番上のNewtonsoft.Jsonをダウンロード。これはJsonを扱うためのパッケージである。
これで、Newtonsoft.Jsonのパッケージが使えるようになる。

##具体的なパッケージ
以下自分が使ったことのあるパッケージを書いていく。
ただ現状少ないので、ちまちま新しいものに挑戦しつつ追加していく。

####Newtonsoft.Jsonパッケージ
今までと同じように、usingで新しくパッケージを使うことができる。

######ObjectからJson,JsonからObject

Program.cs
using System;
using Newtonsoft.Json;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var Apple = new Fruit("Apple", 5, 180);
            var Json = JsonConvert.SerializeObject(Apple);
            Console.WriteLine(Json);
            Console.WriteLine("**********");
            var Obj = JsonConvert.DeserializeObject<Fruit>(Json);
            Console.WriteLine(Obj);
        }
    }

    public class Fruit
    {
        public Fruit(string Name, int Number, int Price)
        {
            this.Name = Name;
            this.Number = Number;
            this.Price = Price;
        }

        public override string ToString()
        {
            var Result = "Name = " + Name +
                         ",Number = " + Number +
                         ",Price = " + Price;
            return Result;
        }

        public string Name { get; set; }
        public int Number { get; set; }
        public int Price { get; set; }
    }
}

実行結果

{"Name":"Apple","Number":5,"Price":180}
**********
Name = Apple,Number = 5,Price = 180

JsonConvert.SerializaObject(object)でobjctをjsonに変換する。
JsonConvert.DeserializaObject(json)でjsonをobjectに変換する。

######ListからJson,JsonからList

Program.cs
using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var Apple = new Fruit("Apple", 5, 180);
            var Banana = new Fruit("Banana", 8, 220);
            var Cherry = new Fruit("Cherry", 4, 190);
            var list = new List<Fruit>() { Apple, Banana, Cherry };
            //var array = new Fruit[] { Apple, Banana, Cherry };
            var Json = JsonConvert.SerializeObject(list);
            Console.WriteLine(Json);
            Console.WriteLine("**********");
            var Objs = JsonConvert.DeserializeObject<List<Fruit>>(Json);
            foreach(var item in Objs)
            {
                Console.WriteLine(item);
            }
        }
    }

実行結果

[{"Name":"Apple","Number":5,"Price":180},{"Name":"Banana","Number":8,"Price":220},{"Name":"Cherry","Number":4,"Price":190}]
**********
Name = Apple,Number = 5,Price = 180
Name = Banana,Number = 8,Price = 220
Name = Cherry,Number = 4,Price = 190

Fruitクラスは上で定義しているので省略。
listでも配列でもjsonは同様のものとなる。

####System.Data.SQLite.Core

Program.cs
using System;
using System.Collections.Generic;
using System.Data.SQLite;

namespace ConsoleApp7
{
    class Program
    {
        static void Main(string[] args)
        {
            Create();
            var fruit = new Fruit();
            fruit.Id = 1;
            fruit.Name = "Apple";
            fruit.Number = 3;
            fruit.Price = 280;
            INSERT(fruit);
            fruit = new Fruit();
            fruit.Id = 2;
            fruit.Name = "Banana";
            fruit.Number = 8;
            fruit.Price = 180;
            INSERT(fruit);
            All();
            DELETE();
        }

        public static void Create()
        {
            var ConnectionStr = new SQLiteConnectionStringBuilder() { DataSource = "test.db" };
            using (var Connection = new SQLiteConnection(ConnectionStr.ToString()))
            {
                Connection.Open();

                using(var Command = new SQLiteCommand(Connection))
                {
                    Command.CommandText = "CREATE TABLE IF NOT EXISTS fruit(id INTEGER, name TEXT, number INTEGER, price INTEGER)";
                    Command.ExecuteNonQuery();
                }
            }
        }

        public static void DELETE()
        {
            var ConnectionStr = new SQLiteConnectionStringBuilder() { DataSource = "test.db" };
            using (var Connection = new SQLiteConnection(ConnectionStr.ToString()))
            {
                Connection.Open();

                using (var Command = new SQLiteCommand(Connection))
                {
                    Command.CommandText = "DELETE FROM fruit";
                    Command.ExecuteNonQuery();
                }
            }
        }

        public static void INSERT(Fruit fruit)
        {
            var ConnectionStr = new SQLiteConnectionStringBuilder() { DataSource = "test.db" };
            using (var Connection = new SQLiteConnection(ConnectionStr.ToString()))
            {
                Connection.Open();

                using (var Command = new SQLiteCommand(Connection))
                {
                    Command.CommandText = "INSERT INTO fruit(id, name, number, price)VALUES(:id, :name, :number, :price)";
                    Command.Parameters.Add(new SQLiteParameter("id", fruit.Id));
                    Command.Parameters.Add(new SQLiteParameter("name", fruit.Name));
                    Command.Parameters.Add(new SQLiteParameter("number", fruit.Number));
                    Command.Parameters.Add(new SQLiteParameter("price", fruit.Price));
                    Command.ExecuteNonQuery();
                }
            }
        }

        public static void All()
        {
            var list = new List<Fruit>();
            var ConnectionStr = new SQLiteConnectionStringBuilder() { DataSource = "test.db" };
            using (var Connection = new SQLiteConnection(ConnectionStr.ToString()))
            {
                Connection.Open();

                using (var Command = new SQLiteCommand(Connection))
                {
                    Command.CommandText = "SELECT id, name, number, price FROM fruit";
                    using (var Reader = Command.ExecuteReader())
                    {
                        while (Reader.Read())
                        {
                            var fruit = new Fruit();
                            fruit.Id = Reader.GetInt32(0);
                            fruit.Name = Reader.GetString(1);
                            fruit.Number = Reader.GetInt32(2);
                            fruit.Price = Reader.GetInt32(3);
                            list.Add(fruit);
                        }
                    }
                }
            }

            foreach(var item in list)
            {
                Console.WriteLine(item);
            }
        }
    }

    public class Fruit
    {
        public override string ToString()
        {
            return "Id = " + Id + ", Name = " + Name + ", Number = " + Number + ", Price = " + Price;
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public int Number { get; set; }
        public int Price { get; set; }
    }
}

SQLITEの場合データベースを作成していなくてもDataSourceは勝手に作成されるので特に気にしなくてもよい。
var Connection = new SQLiteConnection(ConnectionStr.ToString())の部分では設定からConnectionを作成する。Connectionはメモリリークの原因となるので必ずCloseしないとだめ。なので、usingを使う。
var Command = new SQLiteCommand(Connection) はConnectionからコマンドを実行するためのインスタンスを取得する。これもクローズする必要がありusingを使う。
SELECT以外は CommandText にSQL文を書いた後ExecuteNonQueryを実行する。
SELECTの場合は少し面倒で ExecuteReader メソッドから読み込みのためのインスタンスを取得。これもクローズが必要なのでusingが必要。Reader.Read() はReaderを次の行に進めつつレコードがあればtrueを返しなければfalseを返す。値の取得は GetInt32() GetString() メソッドで引数にはカラムの順番を入れる。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?