C# Study 1

C#基礎知識

"time2"

一、Hashtableクラスの使い方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124

【用途】
キーと値をセットにして要素を作成する場合に使う
【Hashtableの宣言】
using System.Collections;

Hashtable hash = new Hashtable();


【Hashtableへ要素を追加する】
hash[キー] = 値;
※キーが無ければ追加、有れば上書きされる


hash.add(キー, 値);
※キーが無ければ追加、有ればArgumentExceptionが発生する


【Hashtableから要素を削除する】
hash.remove(キー);


【Hashtableの要素を取得する】
string str = hash["key1"].ToString();


【同じキーが存在するか確認する】
bool ret = hash.ContainsKey(キー);


【同じ値が存在するか確認する】
bool ret = hash.ContainsValue(値);


【キーを取得しリストボックスへ表示する】
foreach(string key in hash.Keys)
{
this.listbox1.Add(key);
}


【値を取得しリストボックスへ表示する】
foreach(string val in hash.Values)
{
this.listbox1.Add(val);
}


【キーと値を取得しリストボックスへ表示する】
foreach(System.Collections.DictionaryEntry de in hash)
{
this.listbox1.Add(de.Key + " " + de.Value);
}


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hashtable_study
{
class Program
{
static void Main(string[] args)
{
//Hashtableのキーと値取得
Hashtable ht = new Hashtable();
ht["a"] = "aaa";
ht["b"] = "bbb";
ht["c"] = "ccc";

foreach (DictionaryEntry h in ht)
{
Console.WriteLine("キー:{0} 値:{1}", h.Key, h.Value);
}


//昇順でHashtableの値取得
Hashtable ht2 = new Hashtable();
ht2.Add(2,"two");
ht2.Add(1,"one");
ht2.Add(3, "three");
ArrayList keys = new ArrayList(ht2.Keys);
keys.Sort();
foreach (var key in keys)
{
Console.WriteLine(ht2[key]);
}


//Array.Sortで配列のソート
int[] src = { 3,1,4,5,2};
Array.Sort(src);
Console.WriteLine("[{0}]",string.Join(",",src));

//list.SortでListのソート
int[] src2 = { 3, 1, 4, 5, 2 };
var list = new List<int>();

//listに要素を追加
list.AddRange(src2);

list.Sort();

Console.WriteLine("[{0}]", string.Join(", ", list));//ここ要注意src2ではなく、listです。


//暗黙型付け配列
var array = new[]
{
new {X = 0, Y = 1},
new {X = 3, Y = -1},
new {X = 7, Y = 3},
new {X = 13, Y = -5},
};
foreach (var p in array) Console.WriteLine("{0}\n", p);

Console.ReadKey();
}
}
}

二、オーバーライドとオーバーロード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace オーバーライドとオーバーロード
{

/// <summary>
/// オーバーライド
/// オーバーライドとは、スーパークラスのメソッドを上書きする
/// </summary>
public class オーバーライド
{
public virtual void Mothed1()
{
Console.WriteLine("1");
}

}

public class オーバーライド2 : オーバーライド
{
public override void Mothed1()
{
base.Mothed1();
Console.WriteLine("2");
}
}


/// <summary>
/// オーバーロード
/// オーバーロードとは、「引数や戻り値が異なるが名称が同一のメソッドを複数定義する」というオブジェクト指向プログラミングのテクニックである。
/// </summary>

public class オーバーロード
{
public virtual void Method1()
{
Console.WriteLine("1");
}

public void Mothod1(int a)
{
Console.Write(a);
}
}


}

三、抽象クラスと多態性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace abstractclass
{
abstract class Person
{
protected string name;
protected int age;

public Person(string name,int age)
{
this.name = name;
this.age = age;
}

public string Name { get { return this.name; } }
public abstract int Age { get; }//抽象メソッドには定義は要らない

}

/// <summary>
/// 正直者
/// 年齢を偽らない
/// </summary>

class Truepenny : Person
{
public Truepenny(string name,int age) : base(name, age) { }

public override int Age
{
get
{
//実年齢をそのまま返す
return this.age;
}
}
}


/// <summary>
/// 嘘つき。
/// 鯖を読む(しかも、歳取るにつれ大幅に)。
/// </summary>
class Liar : Person
{
public Liar(string name, int age) : base(name, age) { }

public override int Age
{
get
{
// 年齢を偽る。
if (this.age < 20) return this.age;
if (this.age < 25) return this.age - 1;
if (this.age < 30) return this.age - 2;
if (this.age < 35) return this.age - 3;
if (this.age < 40) return this.age - 4;
return this.age - 5;
}
}
}

/// <summary>
/// いいかげん。
/// 大体の歳しか答えない。
/// </summary>
class Equivocator : Person
{
public Equivocator(string name, int age) : base(name, age) { }

public override int Age
{
get
{
// 年齢を四捨五入した値を返す。
return ((this.age + 5) / 10) * 10;
}
}
}

/// <summary>
/// いくつになったって気持ちは17歳。
/// </summary>
class Seventeenist : Person
{
public Seventeenist(string name, int age) : base(name, age) { }

public override int Age
{
get
{
// 「おいおい」って突っ込み入れてあげてね。
return 17;
}
}
}

class PolymorphismTest
{
static void Main()
{
Introduce(new Truepenny ("Ky kiske" ,24));//正直者のカイさん24歳。
Introduce(new Liar("Axl Low", 24));//嘘つきのアクセルさん24歳。
Introduce(new Equivocator("Sol Badguy", 24)); //いい加減なソルさん24歳。
Introduce(new Seventeenist("Ino", 24));// 時空を超えるイノさん24歳。
Console.ReadKey();

}

///<summary>
///自己紹介する
///</summary>

static void Introduce(Person p)
{
Console.Write("My name is {0}.\n", p.Name);
Console.WriteLine("I'm {0} years old.\n", p.Age);
}
}
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace abstractclass
{
abstract class Bird
{
//名前フィールド
private string name;

//引数つきコンストラクタ
public Bird(string name)
{
this.name = name;
}

//名前を取得
public String Name
{
get {return name;}
}

//鳴く(抽象メソッド)
public abstract void Sing();
}

class Sparrow : Bird
{
//コンストラクタ
public Sparrow() : base("すずめ")
{
}
//すずめが鳴く
public override void Sing()
{
Console.WriteLine("チュンチュン");
}
}

class Crow : Bird
{
//コンストラクタ
public Crow() : base("カラス")
{
}
//カラスが鳴く
public override void Sing()
{
Console.WriteLine("カーカー");
}
}

class Program
{
static void Main(string[] args)
{
Crow c = new Crow();
Sparrow s = new Sparrow();
//カラスが鳴く
Console.Write(c.Name + ":");
c.Sing();
//すずめが鳴く
Console.Write(s.Name + ":");
s.Sing();
}

}
}


※※※※※※※※※※※※※※※※※※※※※※
以上のProgramを以下のように変えられる。

class Program
{
static void Main(string[] args)
{
Bird[] b = new Bird[2];
b[0] = new Crow();
b[1] = new Sparrow();
for(int i = 0; i < b.Length ; i ++)
{
Console.Write(b[i].Name + ":");
b[i].Sing();
}
}
}


namespace abstractproperty
{
abstract class VectorBase
{
public abstract double X
{
set;
get;
}

public abstract double Y
{
set;
get;
}
}

class Vector : VectorBase
{
private double x = 0.0;
private double y = 0.0;

//プロパティの実装
public override double X
{
set { x = value;}
get { return x; }
}

public override double Y
{
set { y = value;}
get { return y;}
}
}

class Program
{
static void Main(string[] args)
{
Vector v = new Vector();
v.X = 0.1;
v.Y = 0.2;
Console.WriteLine("v=({0},{1})",v.X,v.Y);
}
}
}

四、列挙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EnumClass
{

[Flags]
enum Flag:int
{
X = 1,
Y ,
Z

}
class EnumClass
{
static void Main(string[] args)
{
Flag f = Flag.X | Flag.Y;
if (f.HasFlag(Flag.X))
{
Console.WriteLine((int)Flag.X);
}
else
{
Console.WriteLine("null");
}

foreach (string name in typeof(Flag).GetEnumNames())
{
Console.WriteLine(name);
}

foreach (Flag val in typeof(Flag).GetEnumValues())
{
Console.WriteLine((int)val);
}

for (int i = 1; i < 4; i++)
{
Console.Write("{0}月 {1}\n", i, (Flag)i);
}
Console.ReadKey();
}
}

enum Month : byte
{
January = 1, February, March, April,
May, June, July, August,
September, October, November, December
}

class EnumSample
{
static void Main()
{
for (int i = 1; i < 12; ++i)
Console.Write("{0}月 {1}\n", i, (Month)i);
Console.ReadKey();
}
}
}

五、委託

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace デリケート_delegate
{
public delegate void GreetingDelegate(string name,int age);

class Program
{
static void EnglishGreeting(string name,int age)
{
Console.WriteLine("{0},GoodMorning!I'm {1} years old.", name,age);
}

static void ChineseGreeting(string name,int age)
{
Console.WriteLine("{0},早上好!我今年 {1} ?了。", name,age);
}

static void GreetPeople(string name, int age,GreetingDelegate MakeGreeting)
{
MakeGreeting(name,age);
}

static void Main(string[] args)
{
GreetPeople("Zhou hengheng",11,EnglishGreeting);
GreetPeople("周",22,ChineseGreeting);
Console.ReadKey();
}
}
}


delegate void CallbackMethod();

class Test
{
static void Main()
{
//従来のデリゲートインスタンス生成式
CallbackMethod callback = new CallbackMethod(Method1);
callback();

//C#2.0のデリゲートインスタンス生成式
callback = Method2;
callback();
}

static void Method1()
{
System.Console.WriteLine("Method 1");
}

static void Method2()
{
System.Console.WriteLine("Method 2");
}
}


namespace WindowsApplication1
{
delegate void Delg()

public class X
{
public void C()
{
MessageBox.Show("C");
}
}

public partial class Form1:Form
{
static void A()
{
MessageBox.Show("A");
}

static void B()
{
MessageBox.Show("B");
}

public Form1()
{
InitializeComponent();
Delg del;
del = new Delg(A);//デリゲートにメソッドAの参照を代入
del += new Delg(B);//デリゲートにメソッドBの参照を追加
X x = new X();//別classのメソッドXの実例化
del += new Delg(x.C);//デリゲートにメソッドCの参照を追加
del();
}
}
}

六、コンストラクターとデストラクター

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System;

/// <summary>
/// 名簿用の個人情報記録用のクラス。
/// とりあえず、名前と年齢のみ。
/// </summary>
class Person
{
// public なフィールド
public string name; // 氏名
public int age; // 年齢

// 定数
const int UNKNOWN = -1;
const string DEFAULT_NAME = "デフォルトの名無しさん";

/// <summary>
/// 名前と年齢を初期化
/// 与えられた年齢が負のときは年齢不詳とみなす
/// </summary>
/// <param name="name">氏名</param>
/// <param name="age">年齢</param>
public Person(string name, int age)
{
this.name = name;
this.age = age > 0 ? age : UNKNOWN;
}

/// <summary>
/// 名前のみを初期化
/// 年齢は不詳とする
/// </summary>
/// <param name="name">氏名</param>
public Person(string name) : this(name, UNKNOWN)
{
}

/// <summary>
/// デフォルトコンストラクター
/// 氏名・年齢ともに不詳
/// </summary>
public Person() : this(null, UNKNOWN)
{
}

/// <summary>
/// 文字列化
/// 氏名が不詳のときには NONAME に設定された名前を返す
/// 年齢が不詳の時には名前のみを返す
/// 氏名・年齢が分かっているときには「名前(xx歳)」という形の文字列を返す
/// </summary>
public override string ToString()
{
if(name == null)
return DEFAULT_NAME;

if(age == UNKNOWN)
return name;

return name + "(" + age + "歳)";
}
}//class Person

//----------------------------------------------------
// メインプログラム
class ConstructorSample
{
static void Main()
{
Person p1 = new Person("ちゆ", 12);
Person p2 = new Person("澪");
Person p3 = new Person();

Console.Write("{0}\n{1}\n{2}\n", p1, p2, p3);
}
}

七、List

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
①Addで要素を追加する

using System;
using System.Collections.Generic;

namespace Sample
{
class Sample
{
static void Main()
{
var list = new List<string>();
list.Add("Tokyo");
list.Add("Osaka");
list.Add("Nagoya");

Console.WriteLine("[{0}]", string.Join(", ", list));
Console.ReadKey();
}
}

②AddRangeで要素を追加する

using System;
using System.Collections.Generic;

namespace Sample
{
class Sample
{
static void Main()
{
string[] src = {"Tokyo", "Osaka", "Nagoya"};
var list = new List<string>();
list.AddRange(src);

Console.WriteLine("[{0}]", string.Join(", ", list));
Console.ReadKey();
}
}

③Removeで要素を削除する

using System;
using System.Collections.Generic;

namespace Sample
{
class Sample
{
static void Main()
{
var list = new List<string>();
list.Add("Tokyo");
list.Add("Osaka");
list.Add("Nagoya");

list.RemoveRange(1, 2);

Console.WriteLine("[{0}]", string.Join(", ", list));
Console.ReadKey();
}
}
}

八、ファイル読込むと書込む

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.IO;
using System.Text;

class FileRead
{
static void Main()
{
StreamReader sr = new StreamReader("readme.txt",Encoding.GetEncoding("Shift_JIS"));
string text = sr.ReadToEnd();
sr.Close();
Console.Write(text);
}
}

using System;
using System.IO;
using System.Text;

class FileWrite
{
static void Main(string[] args)
{
StreamWriter writer = new StreamWriter(@"C:\Test.txt",true,Encoding.GetEncoding("Shift_JIS"));
writer.WriteLine("テスト書込みです。");
writer.Close();
}
}

九、メール送信

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74

using System.Net.Mail;
using System.Net.Sockets;
using System.IO;

private void button1_Click(object sender , EventArgs e)
{
TcpClient tcp = new TcpClient();
StreamWriter wr = null;
string send = "USER ユーザー名\n PASS パスワード\nShuu\n";

try
{
//POPサーバーに接続する
tcp.Connect("POPサーバー",110);

//認証用のユーザー名とパスワードをストリームに送る
wr = new StreamWriter(tcp.GetStream());
wr.Write(send);
SmtpClient sm = new SmtpClient("SMTPサーバー");

//件名と本文を送信する
sm.Send("差出人メールアドレス",
textBox1.Text,//送信先のメールアドレス
textBox2.Text,//件名
textBox3.Text);//メール本文

label2.Text = "送信しました。";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
wr.Close();
tcp.Close();
}
}

②MailMessageオブジェクトでメール送信

public void SendMail()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
//送信者
msg.From = new System.Net.Mail.MailAddress("[email protected]","佐藤");
//宛先
msg.To.Add(new System.Net.Mail.MailAddress("[email protected]","加藤"));
//件名
msg.Subject = "こんにちは";
//本文
msg.Body = "-----";
try
{
System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient();
//SMTPサーバーなどを設定する
sc.Host = "localhost";
sc.Port = 25;
sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.NetWork;
//メッセージを送信する
sc.Send(msg);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
//後始末
msg.Dispose();
sc.Dispose();
}
}

十、interface 接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91

public interface Kihon
{
void print();//メソッドの定義のみ
}

class Hasei:Kihon
{
int a;
public void print()
{
Console.WriteLine("印刷しました。");
}
}

class main_program
{
public static void Main()
{
Hasei pri = new Hasei();
pri.print();
}
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace interface_test
{
//インタフェースの定義
interface IPhone
{
void Call(string number);
}

interface IEmail
{
void SendMail(string address);
}

class CellPhone : IPhone,IEmail
{
//メールアドレス
private string mailAddress;

//電話番号
private string number;

//コンストラクタ(メールアドレスと電話番号を設定)
public CellPhone(string mailAddress, string number)
{
this.mailAddress = mailAddress;
this.number = number;
}

//指定した番号に電話を掛ける
public void Call(string number)
{
Console.WriteLine(number + "に、" + this.number + "から電話をかけます。");
}

//指定したメールアドレスにメールを送信する
public void SendMail(string address)
{
Console.WriteLine(adress + "に、" + this.mailAddress + "からメールを出します。");
}
}

class main_program
{
static void Main(string[] args)
{
//携帯電話クラスで、電話とメールをする
CellPhone cp = new CellPhone("[email protected]","080-1234-5678");
cp.Call("011-1234-5678");
cp.SendMail("[email protected]");

//電話インタフェースでインスタンスにアクセス。
IPhone phone = (IPhone)cp;
phone.Call("022-1234-5678");

//メールインタフェースでインスタンスにアクセス
IEmail mail = (IEmail)cp;
mail.SendMail("[email protected]");
}
}
}

十一、静的なメンバ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
class Program
{
//staticなフィールド
private static int snum = 100;

//インスタンスフィールド
public int inum = 200;

//staticなメソッド
public static void foo()
{
Console.WriteLine("fooメソッド(staticメソッド)");
}

//インスタンスメソッド
public void bar()
{
Console.WriteLine("barメソッド(インスタンスメソッド)");
}

static void Main(string[] args)
{
//インスタンスの生成
Program p = new Program();
Console.WriteLine("pのインスタンスフィールド:inum = {0}",p.inum);
Console.WriteLine("Programのクラスフィールド:snum = {0}",snum);
foo();
p.bar();
}
}
}

十二、データを重複なく管理する方法―HashSetクラス

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
static void Main(string[] args)
{
//ハッシュセットの生成
HashSet<int> t = new HashSet<int>();

t.Add(1);
t.Add(2);
t.Add(3);
t.Add(1);

//データの出力
foreach (int i in t)
{
Console.WriteLine("{0}",i);
}
}
}

結果:1 2 3

十三、トランザクション 事務

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99

private static void ExecuteSqlTransaction(string connectionString)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand command = conn.CreateCommand();

//ここは要注意
SqlTransaction trans = conn.BeginTransaction();

command.Connection = conn;
command.Transaction = trans;

try
{
command.CommandText = "Insert into Region (RegionID,RegionDescription) VALUES ("100","DESCRIPTION")";
command.ExecuteNonQuery();

trans.Commit();
Console.WriteLine("データの挿入しました。");
}
catch (Exception ex)
{
trans.Rollback();
Console.WriteLine("データの挿入が失敗しました。" + ex.Message);
}
finally
{
conn.Close();
}
}
}


using System;
using System.Configuration;
using System.Data.SqlClient;

public void Insert(string id, string password, string phone, string address)
{
//接続文字列の取得
var connectionString = ConfigurationManager.ConnectionString["sqlsvr].ConnectionString;

using (var conn = new SqlConnection(connectionString))
{
try
{
//データベースの接続開始
connection.Open();

using (var trans = connection.BeginTransaction())
using (var command = new SqlCommand() {Connection = conn ,Transaction = trans})
{
try
{
//親テーブルを挿入するSQLの準備
command.CommandText = @"INSERT INTO T_USER (ID,PASSWORD) VALUES (@ID,@PASSWORD)";
command.Parameters.Add(new SqlParameter("@ID",id));
command.Parameters.Add(new SqlParameter("@PASSWORD",password));

//親テーブルを挿入するSQLの実行
command.ExecuteNonQuery();

//子テーブルを挿入するSQLの準備
command.CommandText = @"INSERT INTO T_USER_EXT (ID,PHONE,ADDRESS) VALUES (@ID,@PHONE,@ADDRESS)";
command.Parameters.Add(new SqlParater("@PHONE",phone));
command.Parameters.Add(new SqlParater("@ADDRESS",address));

//子テーブルを挿入するSQLの実行
command.ExecuteNonQuery();

//コミット
trans.Commit();

}
catch
{
trans.Rollback();
throw;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
finally
{
//データベースの接続終了
conn.Close();
}
}
}

※厳密さを考えずに、一言で言うと、
・ExecuteReader select の時使う
・ExecuteNonQuery update, insert, delete など更新系の時使う

十四、非同期操作を用いて、一度に複数のクエリを処理する(未習得)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System.Threading;
using System.Data.SqlClient;

static void Main(string[] args)
{
string ConnectionString = @"Data Source=.;Integrated Security=SSPI;" +
"Initial Catalog=Northwind;" +
"Asynchronous Processing=true";
using(SqlConnection cn1 = new SqlConnection(ConnectionString))
using(SqlConnection cn2 = new SqlConnection(ConnectionString))
using(SqlConnection cn3 = new SqlConnection(ConnectionString))
{
string commandText1 = "WAITFOR DELAY '0:0:10';" +
"SELECT * FROM Products WHERE ProductID = 10";
string commandText2 = "WAITFOR DELAY '0:0:00';" +
"SELECT * FROM Products WHERE ProductID = 20";
string commandText3 = "WAITFOR DELAY '0:0:05';" +
"SELECT * FROM Products WHERE ProductID = 30";
cn1.Open();
SqlCommand cmd1 = new SqlCommand(commandText1, cn1);
IAsyncResult rst1 = cmd1.BeginExecuteReader();
WaitHandle wH1 = rst1.AsyncWaitHandle;

cn2.Open();
SqlCommand cmd2 = new SqlCommand(commandText2, cn2);
IAsyncResult rst2 = cmd2.BeginExecuteReader();
WaitHandle wH2 = rst2.AsyncWaitHandle;

cn3.Open();
SqlCommand cmd3 = new SqlCommand(commandText3, cn3);
IAsyncResult rst3 = cmd3.BeginExecuteReader();
WaitHandle wH3 = rst3.AsyncWaitHandle;

WaitHandle[] waitHandles = { wH1, wH2, wH3 };

int index;
for (int countWaits = 0; countWaits <= 2; countWaits++)
{
index = WaitHandle.WaitAny(waitHandles, 10000, false);

switch (index)
{
case 0:
SqlDataReader dr1 = cmd1.EndExecuteReader(rst1);
DisplayReader(dr1);
break;
case 1:
SqlDataReader dr2 = cmd2.EndExecuteReader(rst2);
DisplayReader(dr2);
break;
case 2:
SqlDataReader dr3 = cmd3.EndExecuteReader(rst3);
DisplayReader(dr3);
break;
case WaitHandle.WaitTimeout:
throw new Exception("タイムアウト");
}
}
}
}

static void DisplayReader(SqlDataReader dr)
{
if (dr.Read())
{
Console.WriteLine(dr[1].ToString() + "\t" + DateTime.Now.ToLongTimeString());
}
dr.Close();
}

十五、ExecuteScalarの使い方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

using System.Data.SqlClient;

static void Main(string[] args)
{
using (sqlConnection conn = new SqlConnection())
{
conn.ConnectionString = "Data Source=.;Initial Catalog=NorthWind;Intergrated Security=True";
conn.Open();

SqlCommand command = new SqlCommand("SELECT COUNT(*) FROM Products",conn);

int Count = (int)cmd.ExecuteScalar();
Console.WriteLine("商品数は{0}件です。",Count);
}

}


using System.Data.SqlClient;

public static int AddProductCategory(string newName, string connString)
{
Int32 newProdID = 0;
string sql = "INSERT INTO Production.ProductCategory (Name) VALUES (@Name);"
+ "SELECT CAST(scope_identity() AS int)";
//※CAST関数は指定されたデータに変換した式の値を返す。例:SELECT CAST('2000-10-31' AS DATE)

using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand command = new SqlCommand(sql,conn);
command.Parameters.Add("@Name",SqlDbType.VarChar);
command.Parameters["@Name"].Value = newName;

try
{
conn.Open();
newProdID = (Int32)cmd.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
return (int)newProdID;
}

十六、ExecuteReaderの使い方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using WebApplication1.Models;

public List<usermodel> GetData()
{
var list = new List<usermodel>();

//接続文字列の取得
var connString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString;

using (var conn = new SqlConnection(connString))
using (var command = conn.CreateCommand())
{
try
{
//データベースの接続開始
conn.Open();

//SQLの設定
command.CommandText = @"SELECT ID,PASSWORD,ROLE_NAME FROM T_USER";

//SQLの実行
using (var reader = command.ExecuteReader())
{
while(reader.Read())
{
list.Add(new UserModel()
{
Id = reader["ID"] as string,
Password = reader["PASSWORD"] as string,
RoleName = reader["ROLE_NAME"] as string
});
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
finally
{
//データベースの接続終了
conn.Close();
}
}
return list;
}


public void Test()
{
SqlConnection conn = new SqlConnection();
SqlCommand command = new SqlCommand();
DataTable dt = new DataTable();

string id = string.Empty;
string name = string.Empty;
int price = 0;

//データベースに接続
conn.ConnectionString = @"Data Source=PC\SQLEXPRESS1;Initial Catalog=TestDatabase;User Id = sa;Password=sa;";
conn.Open();

//SELECT文を設定します。
command.CommandText = "SELECT * FROM T_USER";
command.Connection = conn;

//SQLを実行します。
SqlDataReader reader = command.ExecuteReader();

//結果を表示します。
while(reader.Read())
{
id = (string)reader.GetValue(0),
name = (string)reader.GetValue(1),
price = (long)reader.GetValue(2);

Console.WriteLine("ID:" + id + "名称:" + name + "価格:" + price);
}

//接続を解除する
conn.Close();
}

十七、sessionの使い方(sessionでページ間の値の受け渡し)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
default.aspx,cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SessionVariable
{
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{

}

protected void button1_Click(object sender,EventArgs e)
{
Session["value"] = TextBox1.Text;
Response.Redirect("result.aspx");
}
}
}

result.aspx,cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SessionVariable
{
public partial class result : System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
if(Session["value"] != null)
{
Label1.Text = (string)Session["value"];
}
}
}
}

十八、Cookieの使い方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
Label1.Text = string.Empty;

if (Request.Cookies["userId"] != null)
{
Label1.Text += Server.HtmlEncode(Request.Cookies["userId"].Value);
}

if (Request.Cookies["userName"] != null)
{
HttpCookie cookie = Request.Cookie["userName"];
Label1.Text += Server.HtmlEncode(cookie.Value);
}
}


//Cookieの設定
protected void Button1_Click(object sender,EventArgs e)
{
//Cookie設定方法例1
Response.Cookies["userId"].Value = "UID0001";
Response.Cookies["userId"].Expires = DateTime.Now.AddDays(10);

//Cookie設定方法例2
HttpCookie cookie = new HttpCookie("userName");
cookie.Value = "masao";
cookie.Expires = DateTime.Now.AddDays(10);//有効期設定
Response.Cookies.Add(cookie);
}

//Cookieの削除
protected void Button2_Click(object sender,EventArgs e)
{
//Cookie削除例1
Response.Cookies["userId"].Value = "UID0001";
Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-3);

//Cookie削除例2
HttpCookie cookie = new HttpCookie("userName");

cookie.Value = "masao";
cookie.Expires = DataTime.Now.AddDays(-3);
Response.Cookies.Add(cookie);
}
}

②1つの Cookie に複数のキーと値を設定
protected void Page_Load(object sender,EventArgs e)
{
Label1.Text = string.Empty;

if (Request.Cookies["accessUser] != null)
{
Label1.Text += Server.HtmlEncode(Request.Cookies["accessUser"]["userId"]);
Label1.Text += Server.HtmlEncode(Request.Cookies["accessUser"]["userName"]);
Label1.Text += Server.HtmlEncode(Request.Cookies["accessUser"]["lastAccessTime"]);
}
}

// Cookie の設定
protected void Button1_Click(object sender, EventArgs e)
{
// Cookie 設定方法例1
Response.Cookies["accessUser"]["userId"] = "UID0001"; // ユーザーID
Response.Cookies["accessUser"]["userName"] = "<まさお>"; // ユーザー名
Response.Cookies["accessUser"]["lastAccessTime"] = DateTime.Now.ToString(); // 最終アクセス時間
Response.Cookies["accessUser"].Expires = DateTime.Now.AddDays(10); // Cookie の有効期間(10日)

//// Cookie 設定方法例2
//HttpCookie cookie = new HttpCookie("accessUser");
//cookie.Values["userId"] = "UID0001";    // ユーザーID
//cookie.Values["userName"] = "<まさお>"; // ユーザー名
//cookie.Values["lastAccessTime"] = DateTime.Now.ToString(); // 最終アクセス時間
//cookie.Expires = DateTime.Now.AddDays(10); // Cookie の有効期間(10日)
//Response.Cookies.Add(cookie);
}

十九、CSVデータファイルからデータの読込

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

using System;
using System.IO;

static void ReadCsv
{
try
{
//csvファイルを開く
using (var sr = new StreamReader(@"test.csv"))
{
//ストリームの末尾まで繰り返す
while (!sr.EndofStream)
{
//ファイルから一行読込む
var line = sr.ReadLine();

var values = line.Split(',');

foreach (var value in values)
{
Console.Write("{0}",value);
}
Console.WriteLine();
}
}
}
catch (System.Exception e)
{
Console.WriteLine(e.Message);
}
}


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.VisualBasic.FileIO;

namespace CSVTextFieldParser
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}

private void button1_Click(object sender,EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
label1.Text = openFileDialog1.FileName;

TextFileParser parser = new TextFieldParser(openFileDialog1.FileName,Encoding.GetEncoding("Shift_JIS"));
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(","); //","区切り
//parser.SetDelimiters("\t"); //タブ区切り(TSVファイルの場合)

while (parser.EndOfData == false)
{
string[] column = parser.ReadFields();

for (int i = 0;i < column.Length; i++)
{
textBox1.Text += column[i] + "\r\n";
}
textBox1.Text += "===\r\n";
}
}
}
}
}

③CSVファイルを二次元配列に格納

public string[][] readingCsv(Form1 form1)
{
List<string[]> readCsvList = new List<string[]>();

if (openFileDialog.ShowDialog() == DialogResult.OK)
{
form1.readCsvLabel.Text = openFileDialog.FileName;
using (StreamReader sr = new StreamReader(openFileDialog.FileName, Encoding.GetEncoding("utf-8")))
{
while (!sr.EndOfStream)
{
var line = sr.ReadLine();
readCsvList.Add(line.Split(','));
}
}
}
return readCsvList.ToArray();
}
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%