annotate HowTo/DataAccess/CustomSqlQuery2.cs @ 9:1e85f66cf767 default tip

update bltoolkit
author nickolay
date Thu, 05 Apr 2018 20:53:26 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.IO;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Xml;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 namespace HowTo.DataAccess
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public class CustomSqlQuery2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public abstract class TestAccessorBase<T> : /*[a]*/DataAccessor/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 where T : TestAccessorBase<T>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 const int Sql = 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 const int Access = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 const int Oracle = 2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 const int Fdp = 3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 const int SQLite = 4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 Dictionary<int, string> _sql = new Dictionary<int,string>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 private string GetSql(string providerName, int provider, int queryID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 Stream stream = Assembly.GetCallingAssembly().GetManifestResourceStream(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 "HowTo.DataAccess.Sql." + providerName + ".xml");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 XmlDocument doc = new XmlDocument();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 doc.Load(stream);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 XmlNode node = doc.SelectSingleNode(string.Format("/sql/query[@id={0}]", queryID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 return node != null? node.InnerText: null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 protected /*[a]*/override/*[/a]*/ string /*[a]*/PrepareSqlQuery/*[/a]*/(DbManager db, int queryID, int uniqueID, string sqlQuery)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 int provider = Sql;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 string providerName = db.DataProvider.Name;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 switch (providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 case "Sql" : provider = Sql; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 case "Access": provider = Access; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 case "Oracle": provider = Oracle; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 case "Fdp" : provider = Fdp; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 case "SQLite": provider = SQLite; break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 default:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 throw new ApplicationException(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 string.Format("Unknown data provider '{0}'", providerName));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 string text;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 int key = provider * 1000000 + uniqueID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 if (_sql.TryGetValue(key, out text))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 return text;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 _sql[key] = text = GetSql(providerName, provider, queryID) ?? GetSql("Sql", Sql, queryID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 return text;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 public static T CreateInstance()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 return DataAccessor.CreateInstance<T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 public abstract class PersonAccessor : TestAccessorBase<PersonAccessor>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 [SqlQuery(/*[a]*/ID = 1/*[/a]*/)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 public abstract List<Person> SelectByLastName(string lastName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 [SqlQuery(/*[a]*/ID = 2/*[/a]*/)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 public abstract List<Person> SelectBy([Format] string fieldName, string value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 [SqlQuery(/*[a]*/ID = 3/*[/a]*/)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 public abstract List<Person> SelectByLastName(string lastName, [Format(0)] int top);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 [SqlQuery(/*[a]*/ID = 4/*[/a]*/)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 public abstract List<Person> SelectID(int @id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 public void Test1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 PersonAccessor da = PersonAccessor.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 List<Person> list = da.SelectByLastName("Testerson");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 Assert.AreNotEqual(0, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 public void Test2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 PersonAccessor da = PersonAccessor.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 List<Person> list = da.SelectBy("FirstName", "John");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 Assert.AreNotEqual(0, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 public void Test3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 PersonAccessor da = PersonAccessor.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 List<Person> list = da.SelectByLastName("Testerson", 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 Assert.AreNotEqual(0, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 public void Test4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 PersonAccessor da = PersonAccessor.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 List<Person> list = da.SelectID(42);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 Assert.AreEqual(42, list[0].ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 }