Help us understand the problem. What is going on with this article?

C# NuGetパッケージ

対象読者

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() メソッドで引数にはカラムの順番を入れる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした