我的代码生成器(更新中)
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Data;
5
using System.Data.SqlClient;
6![](/Images/OutliningIndicators/None.gif)
7
namespace JoeyCodeGenerator
8
{
9
public class CSharp : IProgrammingLanguage
10
{
11
public void GenerateBusinessLogicLayer(string projectName, string tableName, DataTable columns, DataTable pk, string folderPath)
12
{
13
string filePath = folderPath + "\\CSharp\\BusinessLogicLayer\\";
14
Routine.WriteFile(filePath + tableName + ".cs", GenerateClass(projectName, tableName, columns));
15
Routine.WriteFile(filePath + tableName + "Broker.cs", GenerateBroker(projectName, tableName));
16
}
17![](/Images/OutliningIndicators/InBlock.gif)
18
public void GenerateDataAccessLayer(string projectName, string tableName, DataTable columns, DataTable pk, string folderPath)
19
{
20
string filePath = folderPath + "\\CSharp\\DataAccessLayer\\";
21
Routine.WriteFile(filePath + tableName + "DataBase.cs", GenerateDataBase(projectName, tableName, columns, pk));
22
}
23![](/Images/OutliningIndicators/InBlock.gif)
24
private string GenerateBroker(string projectName, string tableName)
25
{
26
StringBuilder sb = new StringBuilder();
27
sb.AppendLine("using System;");
28
sb.AppendLine("using System.Collections.Generic;");
29
sb.AppendLine("using System.Text;");
30
sb.AppendLine();
31
sb.AppendLine("namespace " + projectName);
32
sb.AppendLine("{");
33
sb.AppendLine(" public class " + tableName + "Broker");
34
sb.AppendLine(" {");
35
sb.AppendLine(" #region \"Methods\"");
36
sb.AppendLine(" #region \"Insert\"");
37
sb.AppendLine(" public static void Insert(" + tableName + " instance)");
38
sb.AppendLine(" {");
39
sb.AppendLine(" //add business logic here");
40
sb.AppendLine(" " + tableName + "DataBase.Insert(instance);");
41
sb.AppendLine(" }");
42
sb.AppendLine(" #endregion");
43
sb.AppendLine();
44
sb.AppendLine(" #region \"Select\"");
45
sb.AppendLine(" public static void Select(" + tableName + " instance)");
46
sb.AppendLine(" {");
47
sb.AppendLine(" //add business logic here");
48
sb.AppendLine(" " + tableName + "DataBase.Select(instance);");
49
sb.AppendLine(" }");
50
sb.AppendLine(" #endregion");
51
sb.AppendLine();
52
sb.AppendLine(" #region \"Update\"");
53
sb.AppendLine(" public static void Update(" + tableName + " instance)");
54
sb.AppendLine(" {");
55
sb.AppendLine(" //add business logic here");
56
sb.AppendLine(" " + tableName + "DataBase.Update(instance);");
57
sb.AppendLine(" }");
58
sb.AppendLine(" #endregion");
59
sb.AppendLine();
60
sb.AppendLine(" #region \"Delete\"");
61
sb.AppendLine(" public static void Delete(" + tableName + " instance)");
62
sb.AppendLine(" {");
63
sb.AppendLine(" //add business logic here");
64
sb.AppendLine(" " + tableName + "DataBase.Delete(instance);");
65
sb.AppendLine(" }");
66
sb.AppendLine(" #endregion");
67
sb.AppendLine(" #endregion");
68
sb.AppendLine(" }");
69
sb.AppendLine("}");
70
return sb.ToString();
71
}
72![](/Images/OutliningIndicators/InBlock.gif)
73
private string GenerateDataBase(string projectName, string tableName, DataTable columns, DataTable pk)
74
{
75
DataTable npk = Routine.GetNonePKColumns(columns, pk);
76
StringBuilder sb = new StringBuilder();
77
sb.AppendLine("using System;");
78
sb.AppendLine("using System.Collections.Generic;");
79
sb.AppendLine("using System.Text;");
80
sb.AppendLine("using System.Data;");
81
sb.AppendLine("using System.Data.SqlClient;");
82
sb.AppendLine("using System.Configuration;");
83
sb.AppendLine();
84
sb.AppendLine("namespace " + projectName);
85
sb.AppendLine("{");
86
sb.AppendLine(" public class " + tableName + "DataBase");
87
sb.AppendLine(" {");
88
sb.AppendLine(" #region \"Properties\"");
89
sb.AppendLine(" public const string CONNECTION_STRING = ConfigurationManager.ConnectionStrings[\"ConnectionString\"].ConnectionString;");
90
sb.AppendLine(" #endregion");
91
sb.AppendLine();
92
sb.AppendLine(" #region \"Methods\"");
93
sb.AppendLine(" #region \"Insert\"");
94
sb.AppendLine(" public static void Insert(" + tableName + " instance)");
95
sb.AppendLine(" {");
96
sb.AppendLine(" using (SqlConnection conn = new SqlConnection(CONNECTION_STRING))");
97
sb.AppendLine(" {");
98
sb.AppendLine(" using (SqlCommand comm = new SqlCommand())");
99
sb.AppendLine(" {");
100
sb.AppendLine(" comm.Connection = conn;");
101
sb.AppendLine(" comm.CommandType = CommandType.StoredProcedure;");
102
sb.AppendLine(" comm.CommandText = \"" + tableName + "_Insert\";");
103
foreach (DataRow dr in npk.Rows)
104
{
105
sb.AppendLine(" comm.Parameters.AddWithValue(\"@" + dr[0].ToString() + "\", instance." + dr[0].ToString() + ");");
106
}
107
sb.AppendLine(" SqlParameter sp;");
108
if (pk.Rows.Count == 1)//not composite primary key, retrieve the generated pk from database
109
{
110
sb.AppendLine(" sp = comm.Parameters.Add(\"@" + pk.Rows[0][0].ToString() + "\", " + Routine.ConvertFromDatabaseToSqlDbType(pk.Rows[0][1].ToString()) + ");");
111
sb.AppendLine(" sp.Direction = ParameterDirection.Output;");
112
}
113
else//composite primary key
114
{
115
foreach (DataRow dr in pk.Rows)
116
{
117
sb.AppendLine(" comm.Parameters.AddWithValue(\"@" + dr[0].ToString() + "\", instance." + dr[0].ToString() + ");");
118
}
119
}
120
sb.AppendLine(" sp = new SqlParameter();");
121
sb.AppendLine(" sp.Direction = ParameterDirection.ReturnValue;");
122
sb.AppendLine(" comm.Parameters.Add(sp);");
123
sb.AppendLine(" conn.Open();");
124
sb.AppendLine(" comm.ExecuteNonQuery();");
125
sb.AppendLine(" if ((int)sp.Value != 0)");
126
sb.AppendLine(" {");
127
sb.AppendLine(" throw new Exception(\"Errors happened when executing the stored procedure\");");
128
sb.AppendLine(" }");
129
if (pk.Rows.Count == 1)//not composite primary key, retrieve the generated pk from database
130
{
131
sb.AppendLine(" instance." + pk.Rows[0][0].ToString() + " = (" + Routine.ConvertFromDatabaseToLanguage(pk.Rows[0][1].ToString(), ProgrammingLanguageType.CSharp, DatabaseType.MSSQL) + ")comm.Parameters[\"@" + pk.Rows[0][0].ToString() + "\"].Value;");
132
}
133
sb.AppendLine(" conn.Close();");
134
sb.AppendLine(" }");
135
sb.AppendLine(" }");
136
sb.AppendLine(" }");
137
sb.AppendLine(" #endregion");
138
sb.AppendLine();
139
sb.AppendLine(" #region \"Select\"");
140
sb.AppendLine(" public static void Select(" + tableName + " instance)");
141
sb.AppendLine(" {");
142
sb.AppendLine(" using (SqlConnection conn = new SqlConnection(CONNECTION_STRING))");
143
sb.AppendLine(" {");
144
sb.AppendLine(" using (SqlCommand comm = new SqlCommand())");
145
sb.AppendLine(" {");
146
sb.AppendLine(" comm.Connection = conn;");
147
sb.AppendLine(" comm.CommandType = CommandType.StoredProcedure;");
148
sb.AppendLine(" comm.CommandText = \"" + tableName + "_Select\";");
149
foreach (DataRow dr in pk.Rows)
150
{
151
sb.AppendLine(" comm.Parameters.AddWithValue(\"@" + dr[0].ToString() + "\", instance." + dr[0].ToString() + ");");
152
}
153
sb.AppendLine(" SqlParameter sp;");
154
sb.AppendLine(" sp = new SqlParameter();");
155
sb.AppendLine(" sp.Direction = ParameterDirection.ReturnValue;");
156
sb.AppendLine(" comm.Parameters.Add(sp);");
157
sb.AppendLine(" conn.Open();");
158
sb.AppendLine(" using (SqlDataReader sdr = comm.ExecuteReader(CommandBehavior.CloseConnection))");
159
sb.AppendLine(" {");
160
sb.AppendLine(" if (sdr.Read())");
161
sb.AppendLine(" {");
162
foreach (DataRow dr in npk.Rows)
163
{
164
sb.AppendLine(" instance." + dr[0].ToString() + " = (" + Routine.ConvertFromDatabaseToLanguage(dr[1].ToString(), ProgrammingLanguageType.CSharp, DatabaseType.MSSQL) + ")sdr[\"" + dr[0].ToString() + "\"];");
165
}
166
sb.AppendLine(" }");
167
sb.AppendLine(" sdr.Close();");
168
sb.AppendLine(" }");
169
sb.AppendLine(" if ((int)sp.Value != 0)");
170
sb.AppendLine(" {");
171
sb.AppendLine(" throw new Exception(\"Errors happened when executing the stored procedure\");");
172
sb.AppendLine(" }");
173
sb.AppendLine(" }");
174
sb.AppendLine(" }");
175
sb.AppendLine(" }");
176
sb.AppendLine(" #endregion");
177
sb.AppendLine();
178
sb.AppendLine(" #region \"Update\"");
179
sb.AppendLine(" public static void Update(" + tableName + " instance)");
180
sb.AppendLine(" {");
181
sb.AppendLine(" using (SqlConnection conn = new SqlConnection(CONNECTION_STRING))");
182
sb.AppendLine(" {");
183
sb.AppendLine(" using (SqlCommand comm = new SqlCommand())");
184
sb.AppendLine(" {");
185
sb.AppendLine(" comm.Connection = conn;");
186
sb.AppendLine(" comm.CommandType = CommandType.StoredProcedure;");
187
sb.AppendLine(" comm.CommandText = \"" + tableName + "_Update\";");
188
foreach (DataRow dr in columns.Rows)
189
{
190
sb.AppendLine(" comm.Parameters.AddWithValue(\"@" + dr[0].ToString() + "\", instance." + dr[0].ToString() + ");");
191
}
192
sb.AppendLine(" SqlParameter sp;");
193
sb.AppendLine(" sp = new SqlParameter();");
194
sb.AppendLine(" sp.Direction = ParameterDirection.ReturnValue;");
195
sb.AppendLine(" comm.Parameters.Add(sp);");
196
sb.AppendLine(" conn.Open();");
197
sb.AppendLine(" comm.ExecuteNonQuery();");
198
sb.AppendLine(" if ((int)sp.Value != 0)");
199
sb.AppendLine(" {");
200
sb.AppendLine(" throw new Exception(\"Errors happened when executing the stored procedure\");");
201
sb.AppendLine(" }");
202
sb.AppendLine(" conn.Close();");
203
sb.AppendLine(" }");
204
sb.AppendLine(" }");
205
sb.AppendLine(" }");
206
sb.AppendLine(" #endregion");
207
sb.AppendLine();
208
sb.AppendLine(" #region \"Delete\"");
209
sb.AppendLine(" public static void Delete(" + tableName + " instance)");
210
sb.AppendLine(" {");
211
sb.AppendLine(" using (SqlConnection conn = new SqlConnection(CONNECTION_STRING))");
212
sb.AppendLine(" {");
213
sb.AppendLine(" using (SqlCommand comm = new SqlCommand())");
214
sb.AppendLine(" {");
215
sb.AppendLine(" comm.Connection = conn;");
216
sb.AppendLine(" comm.CommandType = CommandType.StoredProcedure;");
217
sb.AppendLine(" comm.CommandText = \"" + tableName + "_Delete\";");
218
foreach (DataRow dr in pk.Rows)
219
{
220
sb.AppendLine(" comm.Parameters.AddWithValue(\"@" + dr[0].ToString() + "\", instance." + dr[0].ToString() + ");");
221
}
222
sb.AppendLine(" SqlParameter sp;");
223
sb.AppendLine(" sp = new SqlParameter();");
224
sb.AppendLine(" sp.Direction = ParameterDirection.ReturnValue;");
225
sb.AppendLine(" comm.Parameters.Add(sp);");
226
sb.AppendLine(" conn.Open();");
227
sb.AppendLine(" comm.ExecuteNonQuery();");
228
sb.AppendLine(" if ((int)sp.Value != 0)");
229
sb.AppendLine(" {");
230
sb.AppendLine(" throw new Exception(\"Errors happened when executing the stored procedure\");");
231
sb.AppendLine(" }");
232
sb.AppendLine(" conn.Close();");
233
sb.AppendLine(" }");
234
sb.AppendLine(" }");
235
sb.AppendLine(" }");
236
sb.AppendLine(" #endregion");
237
sb.AppendLine(" #endregion");
238
sb.AppendLine(" }");
239
sb.AppendLine("}");
240
return sb.ToString();
241
}
242![](/Images/OutliningIndicators/InBlock.gif)
243
private string GenerateClass(string projectName, string tableName, DataTable columns)
244
{
245
StringBuilder sb = new StringBuilder();
246
sb.AppendLine("using System;");
247
sb.AppendLine("using System.Collections.Generic;");
248
sb.AppendLine("using System.Text;");
249
sb.AppendLine();
250
sb.AppendLine("namespace " + projectName);
251
sb.AppendLine("{");
252
sb.AppendLine(" public class " + tableName);
253
sb.AppendLine(" {");
254
sb.AppendLine(" #region \"Properties\"");
255
foreach (DataRow dr in columns.Rows)
256
{
257
sb.AppendLine(" private " + Routine.ConvertFromDatabaseToLanguage(dr[1].ToString(), ProgrammingLanguageType.CSharp, DatabaseType.MSSQL) + " _" + dr[0].ToString() + ";");
258
}
259
foreach (DataRow dr in columns.Rows)
260
{
261
sb.AppendLine();
262
sb.AppendLine(" public " + Routine.ConvertFromDatabaseToLanguage(dr[1].ToString(), ProgrammingLanguageType.CSharp, DatabaseType.MSSQL) + " " + dr[0].ToString());
263
sb.AppendLine(" {");
264
sb.AppendLine(" get");
265
sb.AppendLine(" {");
266
sb.AppendLine(" return this._" + dr[0].ToString() + ";");
267
sb.AppendLine(" }");
268
sb.AppendLine(" set");
269
sb.AppendLine(" {");
270
sb.AppendLine(" this._" + dr[0].ToString() + " = value;");
271
sb.AppendLine(" }");
272
sb.AppendLine(" }");
273
}
274
sb.AppendLine(" #endregion");
275
sb.AppendLine(" }");
276
sb.AppendLine("}");
277
return sb.ToString();
278
}
279
}
280
}
281![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/InBlock.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/InBlock.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/InBlock.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
105
![](/Images/OutliningIndicators/InBlock.gif)
106
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
107
![](/Images/OutliningIndicators/InBlock.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
113
![](/Images/OutliningIndicators/InBlock.gif)
114
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
115
![](/Images/OutliningIndicators/InBlock.gif)
116
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
117
![](/Images/OutliningIndicators/InBlock.gif)
118
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
119
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
120
![](/Images/OutliningIndicators/InBlock.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/InBlock.gif)
123
![](/Images/OutliningIndicators/InBlock.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/InBlock.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/InBlock.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/InBlock.gif)
130
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
131
![](/Images/OutliningIndicators/InBlock.gif)
132
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/InBlock.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/InBlock.gif)
138
![](/Images/OutliningIndicators/InBlock.gif)
139
![](/Images/OutliningIndicators/InBlock.gif)
140
![](/Images/OutliningIndicators/InBlock.gif)
141
![](/Images/OutliningIndicators/InBlock.gif)
142
![](/Images/OutliningIndicators/InBlock.gif)
143
![](/Images/OutliningIndicators/InBlock.gif)
144
![](/Images/OutliningIndicators/InBlock.gif)
145
![](/Images/OutliningIndicators/InBlock.gif)
146
![](/Images/OutliningIndicators/InBlock.gif)
147
![](/Images/OutliningIndicators/InBlock.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/InBlock.gif)
150
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
151
![](/Images/OutliningIndicators/InBlock.gif)
152
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
153
![](/Images/OutliningIndicators/InBlock.gif)
154
![](/Images/OutliningIndicators/InBlock.gif)
155
![](/Images/OutliningIndicators/InBlock.gif)
156
![](/Images/OutliningIndicators/InBlock.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/InBlock.gif)
159
![](/Images/OutliningIndicators/InBlock.gif)
160
![](/Images/OutliningIndicators/InBlock.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/InBlock.gif)
163
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
164
![](/Images/OutliningIndicators/InBlock.gif)
165
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
166
![](/Images/OutliningIndicators/InBlock.gif)
167
![](/Images/OutliningIndicators/InBlock.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/InBlock.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/InBlock.gif)
172
![](/Images/OutliningIndicators/InBlock.gif)
173
![](/Images/OutliningIndicators/InBlock.gif)
174
![](/Images/OutliningIndicators/InBlock.gif)
175
![](/Images/OutliningIndicators/InBlock.gif)
176
![](/Images/OutliningIndicators/InBlock.gif)
177
![](/Images/OutliningIndicators/InBlock.gif)
178
![](/Images/OutliningIndicators/InBlock.gif)
179
![](/Images/OutliningIndicators/InBlock.gif)
180
![](/Images/OutliningIndicators/InBlock.gif)
181
![](/Images/OutliningIndicators/InBlock.gif)
182
![](/Images/OutliningIndicators/InBlock.gif)
183
![](/Images/OutliningIndicators/InBlock.gif)
184
![](/Images/OutliningIndicators/InBlock.gif)
185
![](/Images/OutliningIndicators/InBlock.gif)
186
![](/Images/OutliningIndicators/InBlock.gif)
187
![](/Images/OutliningIndicators/InBlock.gif)
188
![](/Images/OutliningIndicators/InBlock.gif)
189
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
190
![](/Images/OutliningIndicators/InBlock.gif)
191
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
192
![](/Images/OutliningIndicators/InBlock.gif)
193
![](/Images/OutliningIndicators/InBlock.gif)
194
![](/Images/OutliningIndicators/InBlock.gif)
195
![](/Images/OutliningIndicators/InBlock.gif)
196
![](/Images/OutliningIndicators/InBlock.gif)
197
![](/Images/OutliningIndicators/InBlock.gif)
198
![](/Images/OutliningIndicators/InBlock.gif)
199
![](/Images/OutliningIndicators/InBlock.gif)
200
![](/Images/OutliningIndicators/InBlock.gif)
201
![](/Images/OutliningIndicators/InBlock.gif)
202
![](/Images/OutliningIndicators/InBlock.gif)
203
![](/Images/OutliningIndicators/InBlock.gif)
204
![](/Images/OutliningIndicators/InBlock.gif)
205
![](/Images/OutliningIndicators/InBlock.gif)
206
![](/Images/OutliningIndicators/InBlock.gif)
207
![](/Images/OutliningIndicators/InBlock.gif)
208
![](/Images/OutliningIndicators/InBlock.gif)
209
![](/Images/OutliningIndicators/InBlock.gif)
210
![](/Images/OutliningIndicators/InBlock.gif)
211
![](/Images/OutliningIndicators/InBlock.gif)
212
![](/Images/OutliningIndicators/InBlock.gif)
213
![](/Images/OutliningIndicators/InBlock.gif)
214
![](/Images/OutliningIndicators/InBlock.gif)
215
![](/Images/OutliningIndicators/InBlock.gif)
216
![](/Images/OutliningIndicators/InBlock.gif)
217
![](/Images/OutliningIndicators/InBlock.gif)
218
![](/Images/OutliningIndicators/InBlock.gif)
219
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
220
![](/Images/OutliningIndicators/InBlock.gif)
221
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
222
![](/Images/OutliningIndicators/InBlock.gif)
223
![](/Images/OutliningIndicators/InBlock.gif)
224
![](/Images/OutliningIndicators/InBlock.gif)
225
![](/Images/OutliningIndicators/InBlock.gif)
226
![](/Images/OutliningIndicators/InBlock.gif)
227
![](/Images/OutliningIndicators/InBlock.gif)
228
![](/Images/OutliningIndicators/InBlock.gif)
229
![](/Images/OutliningIndicators/InBlock.gif)
230
![](/Images/OutliningIndicators/InBlock.gif)
231
![](/Images/OutliningIndicators/InBlock.gif)
232
![](/Images/OutliningIndicators/InBlock.gif)
233
![](/Images/OutliningIndicators/InBlock.gif)
234
![](/Images/OutliningIndicators/InBlock.gif)
235
![](/Images/OutliningIndicators/InBlock.gif)
236
![](/Images/OutliningIndicators/InBlock.gif)
237
![](/Images/OutliningIndicators/InBlock.gif)
238
![](/Images/OutliningIndicators/InBlock.gif)
239
![](/Images/OutliningIndicators/InBlock.gif)
240
![](/Images/OutliningIndicators/InBlock.gif)
241
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
242
![](/Images/OutliningIndicators/InBlock.gif)
243
![](/Images/OutliningIndicators/InBlock.gif)
244
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
245
![](/Images/OutliningIndicators/InBlock.gif)
246
![](/Images/OutliningIndicators/InBlock.gif)
247
![](/Images/OutliningIndicators/InBlock.gif)
248
![](/Images/OutliningIndicators/InBlock.gif)
249
![](/Images/OutliningIndicators/InBlock.gif)
250
![](/Images/OutliningIndicators/InBlock.gif)
251
![](/Images/OutliningIndicators/InBlock.gif)
252
![](/Images/OutliningIndicators/InBlock.gif)
253
![](/Images/OutliningIndicators/InBlock.gif)
254
![](/Images/OutliningIndicators/InBlock.gif)
255
![](/Images/OutliningIndicators/InBlock.gif)
256
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
257
![](/Images/OutliningIndicators/InBlock.gif)
258
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
259
![](/Images/OutliningIndicators/InBlock.gif)
260
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
261
![](/Images/OutliningIndicators/InBlock.gif)
262
![](/Images/OutliningIndicators/InBlock.gif)
263
![](/Images/OutliningIndicators/InBlock.gif)
264
![](/Images/OutliningIndicators/InBlock.gif)
265
![](/Images/OutliningIndicators/InBlock.gif)
266
![](/Images/OutliningIndicators/InBlock.gif)
267
![](/Images/OutliningIndicators/InBlock.gif)
268
![](/Images/OutliningIndicators/InBlock.gif)
269
![](/Images/OutliningIndicators/InBlock.gif)
270
![](/Images/OutliningIndicators/InBlock.gif)
271
![](/Images/OutliningIndicators/InBlock.gif)
272
![](/Images/OutliningIndicators/InBlock.gif)
273
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
274
![](/Images/OutliningIndicators/InBlock.gif)
275
![](/Images/OutliningIndicators/InBlock.gif)
276
![](/Images/OutliningIndicators/InBlock.gif)
277
![](/Images/OutliningIndicators/InBlock.gif)
278
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
279
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
280
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
281
![](/Images/OutliningIndicators/None.gif)
1
using System;
2![](/Images/OutliningIndicators/None.gif)
3
namespace JoeyCodeGenerator
4
{
5
[Flags]
6
public enum DatabaseType
7
{
8
Default = 0,
9
MSSQL = 1,
10
Oracle = 2,
11
MySQL = 3,
12
Access = 4
13
}
14
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
14
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
using System.IO;
9![](/Images/OutliningIndicators/None.gif)
10
namespace JoeyCodeGenerator
11
{
12
public partial class Form1 : Form
13
{
14
public Form1()
15
{
16
InitializeComponent();
17
}
18![](/Images/OutliningIndicators/InBlock.gif)
19
private void Form1_Load(object sender, EventArgs e)
20
{
21![](/Images/OutliningIndicators/InBlock.gif)
22
}
23![](/Images/OutliningIndicators/InBlock.gif)
24
private void button1_Click(object sender, EventArgs e)
25
{
26
Generator g = new Generator(this.textBox1.Text, this.textBox2.Text, this.textBox3.Text, DatabaseType.MSSQL, ProgrammingLanguageType.CSharp);
27
g.Generate();
28
}
29
}
30
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
30
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Data.SqlClient;
5
using System.Data;
6
using System.IO;
7![](/Images/OutliningIndicators/None.gif)
8
namespace JoeyCodeGenerator
9
{
10
public class Generator
11
{
12
private properties
21![](/Images/OutliningIndicators/InBlock.gif)
22
public properties
107![](/Images/OutliningIndicators/InBlock.gif)
108
constructors
126![](/Images/OutliningIndicators/InBlock.gif)
127
public methods
142
}
143
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
12
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
107
![](/Images/OutliningIndicators/InBlock.gif)
108
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
142
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
143
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Data;
5![](/Images/OutliningIndicators/None.gif)
6
namespace JoeyCodeGenerator
7
{
8
interface IDataBase
9
{
10
DataTable GetColumnsFromTable(string tableName);
11
DataTable GetPKFromTable(string tableName);
12
List<string> GetTableNames();
13
void GenerateStoredProcedures(string tableName, DataTable columns, DataTable pk, string folderPath);
14
}
15
}
16![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
15
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
16
![](/Images/OutliningIndicators/None.gif)
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Data;
5![](/Images/OutliningIndicators/None.gif)
6
namespace JoeyCodeGenerator
7
{
8
interface IProgrammingLanguage
9
{
10
void GenerateBusinessLogicLayer(string projectName, string tableName, DataTable columns, DataTable pk, string folderPath);
11
void GenerateDataAccessLayer(string projectName, string tableName, DataTable columns, DataTable pk, string folderPath);
12
}
13
}
14![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
14
![](/Images/OutliningIndicators/None.gif)
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Data;
5
using System.Data.SqlClient;
6![](/Images/OutliningIndicators/None.gif)
7
namespace JoeyCodeGenerator
8
{
9
public class MSSQL : IDataBase
10
{
11
private string _connectionString;
12![](/Images/OutliningIndicators/InBlock.gif)
13
public MSSQL(String connectionString)
14
{
15
this.ConnectionString = connectionString;
16
}
17![](/Images/OutliningIndicators/InBlock.gif)
18
public string ConnectionString
19
{
20
get
21
{
22
return this._connectionString;
23
}
24
set
25
{
26
this._connectionString = value;
27
}
28
}
29![](/Images/OutliningIndicators/InBlock.gif)
30
public DataTable GetColumnsFromTable(string tableName)
31
{
32
StringBuilder sb = new StringBuilder();
33
sb.AppendLine("SELECT columnTable.name,");
34
sb.AppendLine(" typeTable.name,");
35
sb.AppendLine(" REPLACE(CAST(COLUMNPROPERTY(columnTable.id, columnTable.name, 'PRECISION') AS nvarchar),'-1','4000')");
36
sb.AppendLine(" FROM syscolumns columnTable");
37
sb.AppendLine(" JOIN");
38
sb.AppendLine(" systypes typeTable");
39
sb.AppendLine(" ON columnTable.xtype = typeTable.xtype");
40
sb.AppendLine(" WHERE columnTable.id = object_id(N'" + tableName + "')");
41
sb.AppendLine(" AND typeTable.name <> 'sysname'");
42
DataTable dt = new DataTable();
43
using (SqlConnection conn = new SqlConnection(this.ConnectionString))
44
{
45
using (SqlCommand comm = new SqlCommand())
46
{
47
comm.CommandText = sb.ToString();
48
comm.Connection = conn;
49
conn.Open();
50
using (SqlDataAdapter sda = new SqlDataAdapter())
51
{
52
sda.SelectCommand = comm;
53
sda.Fill(dt);
54
}
55
}
56
}
57
return dt;
58
}
59![](/Images/OutliningIndicators/InBlock.gif)
60
public DataTable GetPKFromTable(string tableName)
61
{
62
StringBuilder sb = new StringBuilder();
63
sb.AppendLine("SELECT PrimaryKey = columnTable.name,");
64
sb.AppendLine(" KeyType = typeTable.name,");
65
sb.AppendLine(" REPLACE(CAST(COLUMNPROPERTY(columnTable.id, columnTable.name, 'PRECISION') AS nvarchar),'-1','4000')");
66
sb.AppendLine(" FROM syscolumns columnTable");
67
sb.AppendLine(" JOIN systypes typeTable");
68
sb.AppendLine(" ON columnTable.xtype = typeTable.xtype");
69
sb.AppendLine(" JOIN sysobjects objectTable");
70
sb.AppendLine(" ON columnTable.id = objectTable.id");
71
sb.AppendLine(" AND objectTable.xtype = 'U'");
72
sb.AppendLine(" AND objectTable.name <> 'dtproperties'");
73
sb.AppendLine(" WHERE EXISTS");
74
sb.AppendLine(" (");
75
sb.AppendLine(" SELECT 1");
76
sb.AppendLine(" FROM sysobjects");
77
sb.AppendLine(" WHERE xtype='PK'");
78
sb.AppendLine(" AND name IN");
79
sb.AppendLine(" (");
80
sb.AppendLine(" SELECT name");
81
sb.AppendLine(" FROM sysindexes");
82
sb.AppendLine(" WHERE indid IN");
83
sb.AppendLine(" (");
84
sb.AppendLine(" SELECT indid");
85
sb.AppendLine(" FROM sysindexkeys");
86
sb.AppendLine(" WHERE id = columnTable.id");
87
sb.AppendLine(" AND colid = columnTable.colid");
88
sb.AppendLine(" )");
89
sb.AppendLine(" )");
90
sb.AppendLine(" )");
91
sb.AppendLine(" AND objectTable.name='" + tableName + "'");
92
sb.AppendLine(" AND typeTable.name <> 'sysname'");
93
DataTable dt = new DataTable();
94
using (SqlConnection conn = new SqlConnection(this.ConnectionString))
95
{
96
using (SqlCommand comm = new SqlCommand())
97
{
98
comm.CommandText = sb.ToString();
99
comm.Connection = conn;
100
conn.Open();
101
using (SqlDataAdapter sda = new SqlDataAdapter())
102
{
103
sda.SelectCommand = comm;
104
sda.Fill(dt);
105
}
106
}
107
}
108
return dt;
109
}
110![](/Images/OutliningIndicators/InBlock.gif)
111
public List<string> GetTableNames()
112
{
113
List<string> tableNames = new List<string>();
114
using (SqlConnection conn = new SqlConnection(this.ConnectionString))
115
{
116
using (SqlCommand comm = new SqlCommand())
117
{
118
comm.CommandText = "SELECT table_name FROM information_schema.tables WHERE table_type = 'BASE TABLE'";
119
comm.Connection = conn;
120
conn.Open();
121
using (SqlDataReader sdr = comm.ExecuteReader(CommandBehavior.CloseConnection))
122
{
123
while (sdr.Read())
124
{
125
tableNames.Add(sdr[0].ToString());
126
}
127
}
128
}
129
}
130
return tableNames;
131
}
132![](/Images/OutliningIndicators/InBlock.gif)
133
public void GenerateStoredProcedures(string tableName, DataTable columns, DataTable pk, string folderPath)
134
{
135
string filePath = folderPath + "\\MSSQL\\";
136
string content;
137
content = GenerateInsert(tableName, columns, pk);
138
if (!string.IsNullOrEmpty(content))
139
{
140
Routine.WriteFile(filePath + tableName + "_Insert.sp", content);
141
}
142
content = GenerateSelect(tableName, columns, pk);
143
if (!string.IsNullOrEmpty(content))
144
{
145
Routine.WriteFile(filePath + tableName + "_Select.sp", content);
146
}
147
content = GenerateUpdate(tableName, columns, pk);
148
if (!string.IsNullOrEmpty(content))
149
{
150
Routine.WriteFile(filePath + tableName + "_Update.sp", content);
151
}
152
content = GenerateDelete(tableName, pk);
153
if (!string.IsNullOrEmpty(content))
154
{
155
Routine.WriteFile(filePath + tableName + "_Delete.sp", content);
156
}
157
}
158![](/Images/OutliningIndicators/InBlock.gif)
159
private string GenerateDelete(string tableName, DataTable pk)
160
{
161
StringBuilder sb = new StringBuilder();
162
sb.AppendLine("SET ANSI_NULLS ON");
163
sb.AppendLine("SET QUOTED_IDENTIFIER OFF");
164
sb.AppendLine("GO");
165
sb.AppendLine("CREATE PROCEDURE " + tableName + "_Delete");
166
for (int i = 0; i < pk.Rows.Count - 1; i++)
167
{
168
if (pk.Rows[i][1].ToString() != "nvarchar" && pk.Rows[i][1].ToString() != "nchar")
169
{
170
sb.AppendLine(" @" + pk.Rows[i][0].ToString() + GenerateProperSpaces(pk.Rows[i][0].ToString(), 18) + pk.Rows[i][1].ToString() + ",");
171
}
172
else
173
{
174
sb.AppendLine(" @" + pk.Rows[i][0].ToString() + GenerateProperSpaces(pk.Rows[i][0].ToString(), 18) + pk.Rows[i][1].ToString() + "(" + pk.Rows[i][2].ToString() + ")" + ",");
175
}
176
}
177
if (pk.Rows.Count != 0)
178
{
179
if (pk.Rows[pk.Rows.Count - 1][1].ToString() != "nvarchar" && pk.Rows[pk.Rows.Count - 1][1].ToString() != "nchar")
180
{
181
sb.AppendLine(" @" + pk.Rows[pk.Rows.Count - 1][0].ToString() + GenerateProperSpaces(pk.Rows[pk.Rows.Count - 1][0].ToString(), 18) + pk.Rows[pk.Rows.Count - 1][1].ToString());
182
}
183
else
184
{
185
sb.AppendLine(" @" + pk.Rows[pk.Rows.Count - 1][0].ToString() + GenerateProperSpaces(pk.Rows[pk.Rows.Count - 1][0].ToString(), 18) + pk.Rows[pk.Rows.Count - 1][1].ToString() + "(" + pk.Rows[pk.Rows.Count - 1][2].ToString() + ")");
186
}
187
}
188
sb.AppendLine("AS");
189
sb.AppendLine("BEGIN");
190
sb.AppendLine(" DECLARE @ErrorCode int");
191
sb.AppendLine(" SELECT @ErrorCode = 0");
192
sb.AppendLine();
193
sb.AppendLine(" DECLARE @TranStarted bit");
194
sb.AppendLine(" SELECT @TranStarted = 0");
195
sb.AppendLine();
196
sb.AppendLine(" IF(@@TRANCOUNT = 0)");
197
sb.AppendLine(" BEGIN");
198
sb.AppendLine(" BEGIN TRANSACTION");
199
sb.AppendLine(" SELECT @TranStarted = 1");
200
sb.AppendLine(" END");
201
sb.AppendLine(" ELSE");
202
sb.AppendLine(" SELECT @TranStarted = 0");
203
sb.AppendLine();
204
sb.AppendLine(" DELETE FROM [" + tableName + "]");
205
if (pk.Rows.Count == 1)
206
{
207
sb.AppendLine(" WHERE [" + pk.Rows[0][0].ToString() + "] = @" + pk.Rows[0][0].ToString());
208
}
209
else
210
{
211
sb.AppendLine(" WHERE [" + pk.Rows[0][0].ToString() + "] = @" + pk.Rows[0][0].ToString());
212
for (int i = 1; i < pk.Rows.Count; i++)
213
{
214
sb.AppendLine(" AND [" + pk.Rows[i][0].ToString() + "] = @" + pk.Rows[i][0].ToString());
215
}
216
}
217
sb.AppendLine();
218
sb.AppendLine(" IF(@@ERROR <> 0)");
219
sb.AppendLine(" BEGIN");
220
sb.AppendLine(" SELECT @ErrorCode = -1");
221
sb.AppendLine(" GOTO Cleanup");
222
sb.AppendLine(" END");
223
sb.AppendLine();
224
sb.AppendLine(" IF(@TranStarted = 1)");
225
sb.AppendLine(" BEGIN");
226
sb.AppendLine(" SELECT @TranStarted = 0");
227
sb.AppendLine(" COMMIT TRANSACTION");
228
sb.AppendLine(" END");
229
sb.AppendLine();
230
sb.AppendLine("Cleanup:");
231
sb.AppendLine();
232
sb.AppendLine(" IF(@TranStarted = 1)");
233
sb.AppendLine(" BEGIN");
234
sb.AppendLine(" SET @TranStarted = 0");
235
sb.AppendLine(" ROLLBACK TRANSACTION");
236
sb.AppendLine(" END");
237
sb.AppendLine();
238
sb.AppendLine(" RETURN @ErrorCode");
239
sb.AppendLine();
240
sb.AppendLine("END");
241
return sb.ToString();
242
}
243![](/Images/OutliningIndicators/InBlock.gif)
244
private string GenerateSelect(string tableName, DataTable columns, DataTable pk)
245
{
246
StringBuilder sb = new StringBuilder();
247
sb.AppendLine("SET ANSI_NULLS ON");
248
sb.AppendLine("SET QUOTED_IDENTIFIER OFF");
249
sb.AppendLine("GO");
250
sb.AppendLine("CREATE PROCEDURE " + tableName + "_Select");
251
for (int i = 0; i < pk.Rows.Count - 1; i++)
252
{
253
if (pk.Rows[i][1].ToString() != "nvarchar" && pk.Rows[i][1].ToString() != "nchar")
254
{
255
sb.AppendLine(" @" + pk.Rows[i][0].ToString() + GenerateProperSpaces(pk.Rows[i][0].ToString(), 18) + pk.Rows[i][1].ToString() + ",");
256
}
257
else
258
{
259
sb.AppendLine(" @" + pk.Rows[i][0].ToString() + GenerateProperSpaces(pk.Rows[i][0].ToString(), 18) + pk.Rows[i][1].ToString() + "(" + pk.Rows[i][2].ToString() + ")" + ",");
260
}
261
}
262
if (pk.Rows.Count != 0)
263
{
264
if (pk.Rows[pk.Rows.Count - 1][1].ToString() != "nvarchar" && pk.Rows[pk.Rows.Count - 1][1].ToString() != "nchar")
265
{
266
sb.AppendLine(" @" + pk.Rows[pk.Rows.Count - 1][0].ToString() + GenerateProperSpaces(pk.Rows[pk.Rows.Count - 1][0].ToString(), 18) + pk.Rows[pk.Rows.Count - 1][1].ToString());
267
}
268
else
269
{
270
sb.AppendLine(" @" + pk.Rows[pk.Rows.Count - 1][0].ToString() + GenerateProperSpaces(pk.Rows[pk.Rows.Count - 1][0].ToString(), 18) + pk.Rows[pk.Rows.Count - 1][1].ToString() + "(" + pk.Rows[pk.Rows.Count - 1][2].ToString() + ")");
271
}
272
}
273
sb.AppendLine("AS");
274
sb.AppendLine("BEGIN");
275
sb.AppendLine(" DECLARE @ErrorCode int");
276
sb.AppendLine(" SELECT @ErrorCode = 0");
277
sb.AppendLine();
278
sb.AppendLine(" DECLARE @TranStarted bit");
279
sb.AppendLine(" SELECT @TranStarted = 0");
280
sb.AppendLine();
281
sb.AppendLine(" IF(@@TRANCOUNT = 0)");
282
sb.AppendLine(" BEGIN");
283
sb.AppendLine(" BEGIN TRANSACTION");
284
sb.AppendLine(" SELECT @TranStarted = 1");
285
sb.AppendLine(" END");
286
sb.AppendLine(" ELSE");
287
sb.AppendLine(" SELECT @TranStarted = 0");
288
sb.AppendLine();
289
sb.Append(" SELECT ");
290
if (columns.Rows.Count == 1)
291
{
292
sb.AppendLine(" @" + columns.Rows[0][0].ToString() + " = [" + columns.Rows[0][0].ToString() + "]");
293
}
294
else
295
{
296
if (columns.Rows.Count == 2)
297
{
298
sb.AppendLine(" [" + columns.Rows[0][0].ToString() + "],");
299
sb.AppendLine(" [" + columns.Rows[1][0].ToString() + "]");
300
}
301
else
302
{
303
sb.AppendLine(" [" + columns.Rows[0][0].ToString() + "],");
304
for (int i = 1; i < columns.Rows.Count - 1; i++)
305
{
306
sb.AppendLine(" [" + columns.Rows[i][0].ToString() + "],");
307
}
308
sb.AppendLine(" [" + columns.Rows[columns.Rows.Count - 1][0].ToString() + "]");
309
}
310
}
311
sb.AppendLine(" FROM [" + tableName + "]");
312
if (pk.Rows.Count == 1)
313
{
314
sb.AppendLine(" WHERE [" + pk.Rows[0][0].ToString() + "] = @" + pk.Rows[0][0].ToString());
315
}
316
else
317
{
318
sb.AppendLine(" WHERE [" + pk.Rows[0][0].ToString() + "] = @" + pk.Rows[0][0].ToString());
319
for (int i = 1; i < pk.Rows.Count; i++)
320
{
321
sb.AppendLine(" AND [" + pk.Rows[i][0].ToString() + "] = @" + pk.Rows[i][0].ToString());
322
}
323
}
324
sb.AppendLine();
325
sb.AppendLine(" IF(@@ERROR <> 0)");
326
sb.AppendLine(" BEGIN");
327
sb.AppendLine(" SELECT @ErrorCode = -1");
328
sb.AppendLine(" GOTO Cleanup");
329
sb.AppendLine(" END");
330
sb.AppendLine();
331
sb.AppendLine(" IF(@TranStarted = 1)");
332
sb.AppendLine(" BEGIN");
333
sb.AppendLine(" SELECT @TranStarted = 0");
334
sb.AppendLine(" COMMIT TRANSACTION");
335
sb.AppendLine(" END");
336
sb.AppendLine();
337
sb.AppendLine("Cleanup:");
338
sb.AppendLine();
339
sb.AppendLine(" IF(@TranStarted = 1)");
340
sb.AppendLine(" BEGIN");
341
sb.AppendLine(" SET @TranStarted = 0");
342
sb.AppendLine(" ROLLBACK TRANSACTION");
343
sb.AppendLine(" END");
344
sb.AppendLine();
345
sb.AppendLine(" RETURN @ErrorCode");
346
sb.AppendLine();
347
sb.AppendLine("END");
348
return sb.ToString();
349
}
350![](/Images/OutliningIndicators/InBlock.gif)
351
private string GenerateInsert(string tableName, DataTable columns, DataTable pk)
352
{
353
DataTable npk = Routine.GetNonePKColumns(columns, pk);
354
StringBuilder sb = new StringBuilder();
355
sb.AppendLine("SET ANSI_NULLS ON");
356
sb.AppendLine("SET QUOTED_IDENTIFIER OFF");
357
sb.AppendLine("GO");
358
sb.AppendLine("CREATE PROCEDURE " + tableName + "_Insert");
359
if (pk.Rows.Count == 1)//need to return id inserted
360
{
361
foreach (DataRow dr in npk.Rows)
362
{
363
if (dr[1].ToString() != "nvarchar" && dr[1].ToString() != "nchar")
364
{
365
sb.AppendLine(" @" + dr[0].ToString() + GenerateProperSpaces(dr[0].ToString(), 20) + dr[1].ToString() + ",");
366
}
367
else
368
{
369
sb.AppendLine(" @" + dr[0].ToString() + GenerateProperSpaces(dr[0].ToString(), 20) + dr[1].ToString() + "(" + dr[2].ToString() + ")" + ",");
370
}
371
}
372
if (pk.Rows[0][2].ToString() != "nvarchar" && pk.Rows[0][2].ToString() != "nchar")
373
{
374
sb.AppendLine(" @" + pk.Rows[0][0].ToString() + GenerateProperSpaces(pk.Rows[0][0].ToString(), 20) + pk.Rows[0][1].ToString() + " OUTPUT");
375
}
376
else
377
{
378
sb.AppendLine(" @" + pk.Rows[0][0].ToString() + GenerateProperSpaces(pk.Rows[0][0].ToString(), 20) + pk.Rows[0][1].ToString() + "(" + pk.Rows[0][2].ToString() + ")" + " OUTPUT");
379
}
380
}
381
else//no need to return id inserted
382
{
383
for (int i = 0; i < columns.Rows.Count - 1; i++)
384
{
385
if (columns.Rows[i][1].ToString() != "nvarchar" && columns.Rows[i][1].ToString() != "nchar")
386
{
387
sb.AppendLine(" @" + columns.Rows[i][0].ToString() + GenerateProperSpaces(columns.Rows[i][0].ToString(), 20) + columns.Rows[i][1].ToString() + ",");
388
}
389
else
390
{
391
sb.AppendLine(" @" + columns.Rows[i][0].ToString() + GenerateProperSpaces(columns.Rows[i][0].ToString(), 20) + columns.Rows[i][1].ToString() + "(" + columns.Rows[i][2].ToString() + ")" + ",");
392
}
393![](/Images/OutliningIndicators/InBlock.gif)
394
}
395
if (columns.Rows.Count != 0)
396
{
397
if (columns.Rows[columns.Rows.Count - 1][1].ToString() != "nvarchar" && columns.Rows[columns.Rows.Count - 1][1].ToString() != "nchar")
398
{
399
sb.AppendLine(" @" + columns.Rows[columns.Rows.Count - 1][0].ToString() + GenerateProperSpaces(columns.Rows[columns.Rows.Count - 1][0].ToString(), 20) + columns.Rows[columns.Rows.Count - 1][1].ToString());
400
}
401
else
402
{
403
sb.AppendLine(" @" + columns.Rows[columns.Rows.Count - 1][0].ToString() + GenerateProperSpaces(columns.Rows[columns.Rows.Count - 1][0].ToString(), 20) + columns.Rows[columns.Rows.Count - 1][1].ToString() + "(" + columns.Rows[columns.Rows.Count - 1][2].ToString() + ")");
404
}
405
}
406
}
407
sb.AppendLine("AS");
408
sb.AppendLine("BEGIN");
409
sb.AppendLine(" DECLARE @ErrorCode int");
410
sb.AppendLine(" SELECT @ErrorCode = 0");
411
sb.AppendLine();
412
sb.AppendLine(" DECLARE @TranStarted bit");
413
sb.AppendLine(" SELECT @TranStarted = 0");
414
sb.AppendLine();
415
sb.AppendLine(" IF(@@TRANCOUNT = 0)");
416
sb.AppendLine(" BEGIN");
417
sb.AppendLine(" BEGIN TRANSACTION");
418
sb.AppendLine(" SELECT @TranStarted = 1");
419
sb.AppendLine(" END");
420
sb.AppendLine(" ELSE");
421
sb.AppendLine(" SELECT @TranStarted = 0");
422
sb.AppendLine();
423
sb.AppendLine(" INSERT INTO [" + tableName + "]");
424
sb.AppendLine(" (");
425
if (pk.Rows.Count == 1)//need to return id inserted
426
{
427
for (int i = 0; i < npk.Rows.Count - 1; i++)
428
{
429
sb.AppendLine(" [" + npk.Rows[i][0].ToString() + "],");
430
}
431
if (npk.Rows.Count != 0)
432
{
433
sb.AppendLine(" [" + npk.Rows[npk.Rows.Count - 1][0].ToString() + "]");
434
}
435
}
436
else
437
{
438
for (int i = 0; i < columns.Rows.Count - 1; i++)
439
{
440
sb.AppendLine(" [" + columns.Rows[i][0].ToString() + "],");
441
}
442
sb.AppendLine(" [" + columns.Rows[columns.Rows.Count - 1][0].ToString() + "]");
443
}
444
sb.AppendLine(" )");
445
sb.AppendLine(" VALUES");
446
sb.AppendLine(" (");
447
if (pk.Rows.Count == 1)//need to return id inserted
448
{
449
for (int i = 0; i < npk.Rows.Count - 1; i++)
450
{
451
sb.AppendLine(" @" + npk.Rows[i][0].ToString() + ",");
452
}
453
if (npk.Rows.Count != 0)
454
{
455
sb.AppendLine(" @" + npk.Rows[npk.Rows.Count - 1][0].ToString());
456
}
457
}
458
else
459
{
460
for (int i = 0; i < columns.Rows.Count - 1; i++)
461
{
462
sb.AppendLine(" @" + columns.Rows[i][0].ToString() + ",");
463
}
464
if (columns.Rows.Count != 0)
465
{
466
sb.AppendLine(" @" + columns.Rows[columns.Rows.Count - 1][0].ToString());
467
}
468
}
469
sb.AppendLine(" )");
470
sb.AppendLine();
471
sb.AppendLine(" IF(@@ERROR <> 0)");
472
sb.AppendLine(" BEGIN");
473
sb.AppendLine(" SELECT @ErrorCode = -1");
474
sb.AppendLine(" GOTO Cleanup");
475
sb.AppendLine(" END");
476
sb.AppendLine();
477
if (pk.Rows.Count == 1)//need to return id inserted
478
{
479
sb.AppendLine(" SELECT @" + pk.Rows[0][0].ToString() + " = @@identity");
480
sb.AppendLine();
481
}
482
sb.AppendLine(" IF(@TranStarted = 1)");
483
sb.AppendLine(" BEGIN");
484
sb.AppendLine(" SELECT @TranStarted = 0");
485
sb.AppendLine(" COMMIT TRANSACTION");
486
sb.AppendLine(" END");
487
sb.AppendLine();
488
sb.AppendLine("Cleanup:");
489
sb.AppendLine();
490
sb.AppendLine(" IF(@TranStarted = 1)");
491
sb.AppendLine(" BEGIN");
492
sb.AppendLine(" SET @TranStarted = 0");
493
sb.AppendLine(" ROLLBACK TRANSACTION");
494
sb.AppendLine(" END");
495
sb.AppendLine();
496
sb.AppendLine(" RETURN @ErrorCode");
497
sb.AppendLine();
498
sb.AppendLine("END");
499
return sb.ToString();
500
}
501![](/Images/OutliningIndicators/InBlock.gif)
502
private string GenerateUpdate(string tableName, DataTable columns, DataTable pk)
503
{
504
DataTable npk = Routine.GetNonePKColumns(columns, pk);
505
if (npk.Rows.Count == 0)
506
{
507
return string.Empty;
508
}
509
StringBuilder sb = new StringBuilder();
510
sb.AppendLine("SET ANSI_NULLS ON");
511
sb.AppendLine("SET QUOTED_IDENTIFIER OFF");
512
sb.AppendLine("GO");
513
sb.AppendLine("CREATE PROCEDURE " + tableName + "_Update");
514
for (int i = 0; i < columns.Rows.Count - 1; i++)
515
{
516
if (columns.Rows[i][1].ToString() != "nvarchar" && columns.Rows[i][1].ToString() != "nchar")
517
{
518
sb.AppendLine(" @" + columns.Rows[i][0].ToString() + GenerateProperSpaces(columns.Rows[i][0].ToString(), 20) + columns.Rows[i][1].ToString() + ",");
519
}
520
else
521
{
522
sb.AppendLine(" @" + columns.Rows[i][0].ToString() + GenerateProperSpaces(columns.Rows[i][0].ToString(), 20) + columns.Rows[i][1].ToString() + "(" + columns.Rows[i][2].ToString() + ")" + ",");
523
}
524
}
525
if (columns.Rows.Count != 0)
526
{
527
if (columns.Rows[columns.Rows.Count - 1][1].ToString() != "nvarchar" && columns.Rows[columns.Rows.Count - 1][1].ToString() != "nchar")
528
{
529
sb.AppendLine(" @" + columns.Rows[columns.Rows.Count - 1][0].ToString() + GenerateProperSpaces(columns.Rows[columns.Rows.Count - 1][0].ToString(), 20) + columns.Rows[columns.Rows.Count - 1][1].ToString());
530
}
531
else
532
{
533
sb.AppendLine(" @" + columns.Rows[columns.Rows.Count - 1][0].ToString() + GenerateProperSpaces(columns.Rows[columns.Rows.Count - 1][0].ToString(), 20) + columns.Rows[columns.Rows.Count - 1][1].ToString() + "(" + columns.Rows[columns.Rows.Count - 1][2].ToString() + ")");
534
}
535
}
536
sb.AppendLine("AS");
537
sb.AppendLine("BEGIN");
538
sb.AppendLine(" DECLARE @ErrorCode int");
539
sb.AppendLine(" SELECT @ErrorCode = 0");
540
sb.AppendLine();
541
sb.AppendLine(" DECLARE @TranStarted bit");
542
sb.AppendLine(" SELECT @TranStarted = 0");
543
sb.AppendLine();
544
sb.AppendLine(" IF(@@TRANCOUNT = 0)");
545
sb.AppendLine(" BEGIN");
546
sb.AppendLine(" BEGIN TRANSACTION");
547
sb.AppendLine(" SELECT @TranStarted = 1");
548
sb.AppendLine(" END");
549
sb.AppendLine(" ELSE");
550
sb.AppendLine(" SELECT @TranStarted = 0");
551
sb.AppendLine();
552
sb.AppendLine(" UPDATE [" + tableName + "]");
553
if (npk.Rows.Count == 1)
554
{
555
sb.AppendLine(" SET [" + npk.Rows[0][0].ToString() + "] = @" + npk.Rows[0][0].ToString());
556
}
557
else if (npk.Rows.Count > 1)
558
{
559
sb.AppendLine(" SET [" + npk.Rows[0][0].ToString() + "] = @" + npk.Rows[0][0].ToString() + ",");
560
if (npk.Rows.Count > 2)
561
{
562
for (int i = 1; i < npk.Rows.Count - 1; i++)
563
{
564
sb.AppendLine(" [" + npk.Rows[i][0].ToString() + "] = @" + npk.Rows[i][0].ToString() + ",");
565
}
566
sb.AppendLine(" [" + npk.Rows[npk.Rows.Count - 1][0].ToString() + "] = @" + npk.Rows[npk.Rows.Count - 1][0].ToString());
567
}
568
else
569
{
570
sb.AppendLine(" [" + npk.Rows[1][0].ToString() + "] = @" + npk.Rows[1][0].ToString());
571
}
572
}
573
if (pk.Rows.Count == 1)
574
{
575
sb.AppendLine(" WHERE [" + pk.Rows[0][0].ToString() + "] = @" + pk.Rows[0][0].ToString());
576
}
577
else
578
{
579
sb.AppendLine(" WHERE [" + pk.Rows[0][0].ToString() + "] = @" + pk.Rows[0][0].ToString());
580
for (int i = 1; i < pk.Rows.Count; i++)
581
{
582
sb.AppendLine(" AND [" + pk.Rows[i][0].ToString() + "] = @" + pk.Rows[i][0].ToString());
583
}
584
}
585
sb.AppendLine();
586
sb.AppendLine(" IF(@@ERROR <> 0)");
587
sb.AppendLine(" BEGIN");
588
sb.AppendLine(" SELECT @ErrorCode = -1");
589
sb.AppendLine(" GOTO Cleanup");
590
sb.AppendLine(" END");
591
sb.AppendLine();
592
sb.AppendLine(" IF(@TranStarted = 1)");
593
sb.AppendLine(" BEGIN");
594
sb.AppendLine(" SELECT @TranStarted = 0");
595
sb.AppendLine(" COMMIT TRANSACTION");
596
sb.AppendLine(" END");
597
sb.AppendLine();
598
sb.AppendLine("Cleanup:");
599
sb.AppendLine();
600
sb.AppendLine(" IF(@TranStarted = 1)");
601
sb.AppendLine(" BEGIN");
602
sb.AppendLine(" SET @TranStarted = 0");
603
sb.AppendLine(" ROLLBACK TRANSACTION");
604
sb.AppendLine(" END");
605
sb.AppendLine();
606
sb.AppendLine(" RETURN @ErrorCode");
607
sb.AppendLine();
608
sb.AppendLine("END");
609
return sb.ToString();
610
}
611![](/Images/OutliningIndicators/InBlock.gif)
612
private string GenerateProperSpaces(string input, int totalSpaces)
613
{
614
if (input.Length >= totalSpaces)
615
{
616
return " ";
617
}
618
StringBuilder sb = new StringBuilder();
619
for (int i = 0; i < totalSpaces - input.Length; i++)
620
{
621
sb.Append(" ");
622
}
623
return sb.ToString();
624
}
625
}
626
}
627![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
55
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
56
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/InBlock.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
106
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
107
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
113
![](/Images/OutliningIndicators/InBlock.gif)
114
![](/Images/OutliningIndicators/InBlock.gif)
115
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
116
![](/Images/OutliningIndicators/InBlock.gif)
117
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/InBlock.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
123
![](/Images/OutliningIndicators/InBlock.gif)
124
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
125
![](/Images/OutliningIndicators/InBlock.gif)
126
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
127
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
128
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
129
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
130
![](/Images/OutliningIndicators/InBlock.gif)
131
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
132
![](/Images/OutliningIndicators/InBlock.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/InBlock.gif)
138
![](/Images/OutliningIndicators/InBlock.gif)
139
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
140
![](/Images/OutliningIndicators/InBlock.gif)
141
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
142
![](/Images/OutliningIndicators/InBlock.gif)
143
![](/Images/OutliningIndicators/InBlock.gif)
144
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
145
![](/Images/OutliningIndicators/InBlock.gif)
146
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
147
![](/Images/OutliningIndicators/InBlock.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
150
![](/Images/OutliningIndicators/InBlock.gif)
151
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
152
![](/Images/OutliningIndicators/InBlock.gif)
153
![](/Images/OutliningIndicators/InBlock.gif)
154
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
155
![](/Images/OutliningIndicators/InBlock.gif)
156
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
157
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
158
![](/Images/OutliningIndicators/InBlock.gif)
159
![](/Images/OutliningIndicators/InBlock.gif)
160
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/InBlock.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/InBlock.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/InBlock.gif)
167
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
172
![](/Images/OutliningIndicators/InBlock.gif)
173
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
174
![](/Images/OutliningIndicators/InBlock.gif)
175
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
176
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
177
![](/Images/OutliningIndicators/InBlock.gif)
178
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
179
![](/Images/OutliningIndicators/InBlock.gif)
180
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
181
![](/Images/OutliningIndicators/InBlock.gif)
182
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
183
![](/Images/OutliningIndicators/InBlock.gif)
184
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
185
![](/Images/OutliningIndicators/InBlock.gif)
186
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
187
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
188
![](/Images/OutliningIndicators/InBlock.gif)
189
![](/Images/OutliningIndicators/InBlock.gif)
190
![](/Images/OutliningIndicators/InBlock.gif)
191
![](/Images/OutliningIndicators/InBlock.gif)
192
![](/Images/OutliningIndicators/InBlock.gif)
193
![](/Images/OutliningIndicators/InBlock.gif)
194
![](/Images/OutliningIndicators/InBlock.gif)
195
![](/Images/OutliningIndicators/InBlock.gif)
196
![](/Images/OutliningIndicators/InBlock.gif)
197
![](/Images/OutliningIndicators/InBlock.gif)
198
![](/Images/OutliningIndicators/InBlock.gif)
199
![](/Images/OutliningIndicators/InBlock.gif)
200
![](/Images/OutliningIndicators/InBlock.gif)
201
![](/Images/OutliningIndicators/InBlock.gif)
202
![](/Images/OutliningIndicators/InBlock.gif)
203
![](/Images/OutliningIndicators/InBlock.gif)
204
![](/Images/OutliningIndicators/InBlock.gif)
205
![](/Images/OutliningIndicators/InBlock.gif)
206
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
207
![](/Images/OutliningIndicators/InBlock.gif)
208
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
209
![](/Images/OutliningIndicators/InBlock.gif)
210
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
211
![](/Images/OutliningIndicators/InBlock.gif)
212
![](/Images/OutliningIndicators/InBlock.gif)
213
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
214
![](/Images/OutliningIndicators/InBlock.gif)
215
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
216
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
217
![](/Images/OutliningIndicators/InBlock.gif)
218
![](/Images/OutliningIndicators/InBlock.gif)
219
![](/Images/OutliningIndicators/InBlock.gif)
220
![](/Images/OutliningIndicators/InBlock.gif)
221
![](/Images/OutliningIndicators/InBlock.gif)
222
![](/Images/OutliningIndicators/InBlock.gif)
223
![](/Images/OutliningIndicators/InBlock.gif)
224
![](/Images/OutliningIndicators/InBlock.gif)
225
![](/Images/OutliningIndicators/InBlock.gif)
226
![](/Images/OutliningIndicators/InBlock.gif)
227
![](/Images/OutliningIndicators/InBlock.gif)
228
![](/Images/OutliningIndicators/InBlock.gif)
229
![](/Images/OutliningIndicators/InBlock.gif)
230
![](/Images/OutliningIndicators/InBlock.gif)
231
![](/Images/OutliningIndicators/InBlock.gif)
232
![](/Images/OutliningIndicators/InBlock.gif)
233
![](/Images/OutliningIndicators/InBlock.gif)
234
![](/Images/OutliningIndicators/InBlock.gif)
235
![](/Images/OutliningIndicators/InBlock.gif)
236
![](/Images/OutliningIndicators/InBlock.gif)
237
![](/Images/OutliningIndicators/InBlock.gif)
238
![](/Images/OutliningIndicators/InBlock.gif)
239
![](/Images/OutliningIndicators/InBlock.gif)
240
![](/Images/OutliningIndicators/InBlock.gif)
241
![](/Images/OutliningIndicators/InBlock.gif)
242
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
243
![](/Images/OutliningIndicators/InBlock.gif)
244
![](/Images/OutliningIndicators/InBlock.gif)
245
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
246
![](/Images/OutliningIndicators/InBlock.gif)
247
![](/Images/OutliningIndicators/InBlock.gif)
248
![](/Images/OutliningIndicators/InBlock.gif)
249
![](/Images/OutliningIndicators/InBlock.gif)
250
![](/Images/OutliningIndicators/InBlock.gif)
251
![](/Images/OutliningIndicators/InBlock.gif)
252
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
253
![](/Images/OutliningIndicators/InBlock.gif)
254
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
255
![](/Images/OutliningIndicators/InBlock.gif)
256
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
257
![](/Images/OutliningIndicators/InBlock.gif)
258
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
259
![](/Images/OutliningIndicators/InBlock.gif)
260
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
261
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
262
![](/Images/OutliningIndicators/InBlock.gif)
263
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
264
![](/Images/OutliningIndicators/InBlock.gif)
265
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
266
![](/Images/OutliningIndicators/InBlock.gif)
267
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
268
![](/Images/OutliningIndicators/InBlock.gif)
269
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
270
![](/Images/OutliningIndicators/InBlock.gif)
271
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
272
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
273
![](/Images/OutliningIndicators/InBlock.gif)
274
![](/Images/OutliningIndicators/InBlock.gif)
275
![](/Images/OutliningIndicators/InBlock.gif)
276
![](/Images/OutliningIndicators/InBlock.gif)
277
![](/Images/OutliningIndicators/InBlock.gif)
278
![](/Images/OutliningIndicators/InBlock.gif)
279
![](/Images/OutliningIndicators/InBlock.gif)
280
![](/Images/OutliningIndicators/InBlock.gif)
281
![](/Images/OutliningIndicators/InBlock.gif)
282
![](/Images/OutliningIndicators/InBlock.gif)
283
![](/Images/OutliningIndicators/InBlock.gif)
284
![](/Images/OutliningIndicators/InBlock.gif)
285
![](/Images/OutliningIndicators/InBlock.gif)
286
![](/Images/OutliningIndicators/InBlock.gif)
287
![](/Images/OutliningIndicators/InBlock.gif)
288
![](/Images/OutliningIndicators/InBlock.gif)
289
![](/Images/OutliningIndicators/InBlock.gif)
290
![](/Images/OutliningIndicators/InBlock.gif)
291
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
292
![](/Images/OutliningIndicators/InBlock.gif)
293
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
294
![](/Images/OutliningIndicators/InBlock.gif)
295
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
296
![](/Images/OutliningIndicators/InBlock.gif)
297
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
298
![](/Images/OutliningIndicators/InBlock.gif)
299
![](/Images/OutliningIndicators/InBlock.gif)
300
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
301
![](/Images/OutliningIndicators/InBlock.gif)
302
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
303
![](/Images/OutliningIndicators/InBlock.gif)
304
![](/Images/OutliningIndicators/InBlock.gif)
305
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
306
![](/Images/OutliningIndicators/InBlock.gif)
307
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
308
![](/Images/OutliningIndicators/InBlock.gif)
309
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
310
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
311
![](/Images/OutliningIndicators/InBlock.gif)
312
![](/Images/OutliningIndicators/InBlock.gif)
313
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
314
![](/Images/OutliningIndicators/InBlock.gif)
315
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
316
![](/Images/OutliningIndicators/InBlock.gif)
317
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
318
![](/Images/OutliningIndicators/InBlock.gif)
319
![](/Images/OutliningIndicators/InBlock.gif)
320
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
321
![](/Images/OutliningIndicators/InBlock.gif)
322
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
323
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
324
![](/Images/OutliningIndicators/InBlock.gif)
325
![](/Images/OutliningIndicators/InBlock.gif)
326
![](/Images/OutliningIndicators/InBlock.gif)
327
![](/Images/OutliningIndicators/InBlock.gif)
328
![](/Images/OutliningIndicators/InBlock.gif)
329
![](/Images/OutliningIndicators/InBlock.gif)
330
![](/Images/OutliningIndicators/InBlock.gif)
331
![](/Images/OutliningIndicators/InBlock.gif)
332
![](/Images/OutliningIndicators/InBlock.gif)
333
![](/Images/OutliningIndicators/InBlock.gif)
334
![](/Images/OutliningIndicators/InBlock.gif)
335
![](/Images/OutliningIndicators/InBlock.gif)
336
![](/Images/OutliningIndicators/InBlock.gif)
337
![](/Images/OutliningIndicators/InBlock.gif)
338
![](/Images/OutliningIndicators/InBlock.gif)
339
![](/Images/OutliningIndicators/InBlock.gif)
340
![](/Images/OutliningIndicators/InBlock.gif)
341
![](/Images/OutliningIndicators/InBlock.gif)
342
![](/Images/OutliningIndicators/InBlock.gif)
343
![](/Images/OutliningIndicators/InBlock.gif)
344
![](/Images/OutliningIndicators/InBlock.gif)
345
![](/Images/OutliningIndicators/InBlock.gif)
346
![](/Images/OutliningIndicators/InBlock.gif)
347
![](/Images/OutliningIndicators/InBlock.gif)
348
![](/Images/OutliningIndicators/InBlock.gif)
349
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
350
![](/Images/OutliningIndicators/InBlock.gif)
351
![](/Images/OutliningIndicators/InBlock.gif)
352
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
353
![](/Images/OutliningIndicators/InBlock.gif)
354
![](/Images/OutliningIndicators/InBlock.gif)
355
![](/Images/OutliningIndicators/InBlock.gif)
356
![](/Images/OutliningIndicators/InBlock.gif)
357
![](/Images/OutliningIndicators/InBlock.gif)
358
![](/Images/OutliningIndicators/InBlock.gif)
359
![](/Images/OutliningIndicators/InBlock.gif)
360
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
361
![](/Images/OutliningIndicators/InBlock.gif)
362
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
363
![](/Images/OutliningIndicators/InBlock.gif)
364
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
365
![](/Images/OutliningIndicators/InBlock.gif)
366
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
367
![](/Images/OutliningIndicators/InBlock.gif)
368
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
369
![](/Images/OutliningIndicators/InBlock.gif)
370
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
371
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
372
![](/Images/OutliningIndicators/InBlock.gif)
373
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
374
![](/Images/OutliningIndicators/InBlock.gif)
375
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
376
![](/Images/OutliningIndicators/InBlock.gif)
377
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
378
![](/Images/OutliningIndicators/InBlock.gif)
379
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
380
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
381
![](/Images/OutliningIndicators/InBlock.gif)
382
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
383
![](/Images/OutliningIndicators/InBlock.gif)
384
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
385
![](/Images/OutliningIndicators/InBlock.gif)
386
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
387
![](/Images/OutliningIndicators/InBlock.gif)
388
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
389
![](/Images/OutliningIndicators/InBlock.gif)
390
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
391
![](/Images/OutliningIndicators/InBlock.gif)
392
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
393
![](/Images/OutliningIndicators/InBlock.gif)
394
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
395
![](/Images/OutliningIndicators/InBlock.gif)
396
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
397
![](/Images/OutliningIndicators/InBlock.gif)
398
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
399
![](/Images/OutliningIndicators/InBlock.gif)
400
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
401
![](/Images/OutliningIndicators/InBlock.gif)
402
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
403
![](/Images/OutliningIndicators/InBlock.gif)
404
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
405
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
406
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
407
![](/Images/OutliningIndicators/InBlock.gif)
408
![](/Images/OutliningIndicators/InBlock.gif)
409
![](/Images/OutliningIndicators/InBlock.gif)
410
![](/Images/OutliningIndicators/InBlock.gif)
411
![](/Images/OutliningIndicators/InBlock.gif)
412
![](/Images/OutliningIndicators/InBlock.gif)
413
![](/Images/OutliningIndicators/InBlock.gif)
414
![](/Images/OutliningIndicators/InBlock.gif)
415
![](/Images/OutliningIndicators/InBlock.gif)
416
![](/Images/OutliningIndicators/InBlock.gif)
417
![](/Images/OutliningIndicators/InBlock.gif)
418
![](/Images/OutliningIndicators/InBlock.gif)
419
![](/Images/OutliningIndicators/InBlock.gif)
420
![](/Images/OutliningIndicators/InBlock.gif)
421
![](/Images/OutliningIndicators/InBlock.gif)
422
![](/Images/OutliningIndicators/InBlock.gif)
423
![](/Images/OutliningIndicators/InBlock.gif)
424
![](/Images/OutliningIndicators/InBlock.gif)
425
![](/Images/OutliningIndicators/InBlock.gif)
426
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
427
![](/Images/OutliningIndicators/InBlock.gif)
428
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
429
![](/Images/OutliningIndicators/InBlock.gif)
430
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
431
![](/Images/OutliningIndicators/InBlock.gif)
432
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
433
![](/Images/OutliningIndicators/InBlock.gif)
434
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
435
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
436
![](/Images/OutliningIndicators/InBlock.gif)
437
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
438
![](/Images/OutliningIndicators/InBlock.gif)
439
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
440
![](/Images/OutliningIndicators/InBlock.gif)
441
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
442
![](/Images/OutliningIndicators/InBlock.gif)
443
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
444
![](/Images/OutliningIndicators/InBlock.gif)
445
![](/Images/OutliningIndicators/InBlock.gif)
446
![](/Images/OutliningIndicators/InBlock.gif)
447
![](/Images/OutliningIndicators/InBlock.gif)
448
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
449
![](/Images/OutliningIndicators/InBlock.gif)
450
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
451
![](/Images/OutliningIndicators/InBlock.gif)
452
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
453
![](/Images/OutliningIndicators/InBlock.gif)
454
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
455
![](/Images/OutliningIndicators/InBlock.gif)
456
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
457
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
458
![](/Images/OutliningIndicators/InBlock.gif)
459
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
460
![](/Images/OutliningIndicators/InBlock.gif)
461
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
462
![](/Images/OutliningIndicators/InBlock.gif)
463
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
464
![](/Images/OutliningIndicators/InBlock.gif)
465
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
466
![](/Images/OutliningIndicators/InBlock.gif)
467
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
468
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
469
![](/Images/OutliningIndicators/InBlock.gif)
470
![](/Images/OutliningIndicators/InBlock.gif)
471
![](/Images/OutliningIndicators/InBlock.gif)
472
![](/Images/OutliningIndicators/InBlock.gif)
473
![](/Images/OutliningIndicators/InBlock.gif)
474
![](/Images/OutliningIndicators/InBlock.gif)
475
![](/Images/OutliningIndicators/InBlock.gif)
476
![](/Images/OutliningIndicators/InBlock.gif)
477
![](/Images/OutliningIndicators/InBlock.gif)
478
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
479
![](/Images/OutliningIndicators/InBlock.gif)
480
![](/Images/OutliningIndicators/InBlock.gif)
481
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
482
![](/Images/OutliningIndicators/InBlock.gif)
483
![](/Images/OutliningIndicators/InBlock.gif)
484
![](/Images/OutliningIndicators/InBlock.gif)
485
![](/Images/OutliningIndicators/InBlock.gif)
486
![](/Images/OutliningIndicators/InBlock.gif)
487
![](/Images/OutliningIndicators/InBlock.gif)
488
![](/Images/OutliningIndicators/InBlock.gif)
489
![](/Images/OutliningIndicators/InBlock.gif)
490
![](/Images/OutliningIndicators/InBlock.gif)
491
![](/Images/OutliningIndicators/InBlock.gif)
492
![](/Images/OutliningIndicators/InBlock.gif)
493
![](/Images/OutliningIndicators/InBlock.gif)
494
![](/Images/OutliningIndicators/InBlock.gif)
495
![](/Images/OutliningIndicators/InBlock.gif)
496
![](/Images/OutliningIndicators/InBlock.gif)
497
![](/Images/OutliningIndicators/InBlock.gif)
498
![](/Images/OutliningIndicators/InBlock.gif)
499
![](/Images/OutliningIndicators/InBlock.gif)
500
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
501
![](/Images/OutliningIndicators/InBlock.gif)
502
![](/Images/OutliningIndicators/InBlock.gif)
503
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
504
![](/Images/OutliningIndicators/InBlock.gif)
505
![](/Images/OutliningIndicators/InBlock.gif)
506
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
507
![](/Images/OutliningIndicators/InBlock.gif)
508
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
509
![](/Images/OutliningIndicators/InBlock.gif)
510
![](/Images/OutliningIndicators/InBlock.gif)
511
![](/Images/OutliningIndicators/InBlock.gif)
512
![](/Images/OutliningIndicators/InBlock.gif)
513
![](/Images/OutliningIndicators/InBlock.gif)
514
![](/Images/OutliningIndicators/InBlock.gif)
515
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
516
![](/Images/OutliningIndicators/InBlock.gif)
517
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
518
![](/Images/OutliningIndicators/InBlock.gif)
519
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
520
![](/Images/OutliningIndicators/InBlock.gif)
521
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
522
![](/Images/OutliningIndicators/InBlock.gif)
523
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
524
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
525
![](/Images/OutliningIndicators/InBlock.gif)
526
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
527
![](/Images/OutliningIndicators/InBlock.gif)
528
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
529
![](/Images/OutliningIndicators/InBlock.gif)
530
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
531
![](/Images/OutliningIndicators/InBlock.gif)
532
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
533
![](/Images/OutliningIndicators/InBlock.gif)
534
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
535
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
536
![](/Images/OutliningIndicators/InBlock.gif)
537
![](/Images/OutliningIndicators/InBlock.gif)
538
![](/Images/OutliningIndicators/InBlock.gif)
539
![](/Images/OutliningIndicators/InBlock.gif)
540
![](/Images/OutliningIndicators/InBlock.gif)
541
![](/Images/OutliningIndicators/InBlock.gif)
542
![](/Images/OutliningIndicators/InBlock.gif)
543
![](/Images/OutliningIndicators/InBlock.gif)
544
![](/Images/OutliningIndicators/InBlock.gif)
545
![](/Images/OutliningIndicators/InBlock.gif)
546
![](/Images/OutliningIndicators/InBlock.gif)
547
![](/Images/OutliningIndicators/InBlock.gif)
548
![](/Images/OutliningIndicators/InBlock.gif)
549
![](/Images/OutliningIndicators/InBlock.gif)
550
![](/Images/OutliningIndicators/InBlock.gif)
551
![](/Images/OutliningIndicators/InBlock.gif)
552
![](/Images/OutliningIndicators/InBlock.gif)
553
![](/Images/OutliningIndicators/InBlock.gif)
554
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
555
![](/Images/OutliningIndicators/InBlock.gif)
556
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
557
![](/Images/OutliningIndicators/InBlock.gif)
558
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
559
![](/Images/OutliningIndicators/InBlock.gif)
560
![](/Images/OutliningIndicators/InBlock.gif)
561
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
562
![](/Images/OutliningIndicators/InBlock.gif)
563
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
564
![](/Images/OutliningIndicators/InBlock.gif)
565
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
566
![](/Images/OutliningIndicators/InBlock.gif)
567
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
568
![](/Images/OutliningIndicators/InBlock.gif)
569
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
570
![](/Images/OutliningIndicators/InBlock.gif)
571
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
572
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
573
![](/Images/OutliningIndicators/InBlock.gif)
574
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
575
![](/Images/OutliningIndicators/InBlock.gif)
576
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
577
![](/Images/OutliningIndicators/InBlock.gif)
578
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
579
![](/Images/OutliningIndicators/InBlock.gif)
580
![](/Images/OutliningIndicators/InBlock.gif)
581
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
582
![](/Images/OutliningIndicators/InBlock.gif)
583
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
584
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
585
![](/Images/OutliningIndicators/InBlock.gif)
586
![](/Images/OutliningIndicators/InBlock.gif)
587
![](/Images/OutliningIndicators/InBlock.gif)
588
![](/Images/OutliningIndicators/InBlock.gif)
589
![](/Images/OutliningIndicators/InBlock.gif)
590
![](/Images/OutliningIndicators/InBlock.gif)
591
![](/Images/OutliningIndicators/InBlock.gif)
592
![](/Images/OutliningIndicators/InBlock.gif)
593
![](/Images/OutliningIndicators/InBlock.gif)
594
![](/Images/OutliningIndicators/InBlock.gif)
595
![](/Images/OutliningIndicators/InBlock.gif)
596
![](/Images/OutliningIndicators/InBlock.gif)
597
![](/Images/OutliningIndicators/InBlock.gif)
598
![](/Images/OutliningIndicators/InBlock.gif)
599
![](/Images/OutliningIndicators/InBlock.gif)
600
![](/Images/OutliningIndicators/InBlock.gif)
601
![](/Images/OutliningIndicators/InBlock.gif)
602
![](/Images/OutliningIndicators/InBlock.gif)
603
![](/Images/OutliningIndicators/InBlock.gif)
604
![](/Images/OutliningIndicators/InBlock.gif)
605
![](/Images/OutliningIndicators/InBlock.gif)
606
![](/Images/OutliningIndicators/InBlock.gif)
607
![](/Images/OutliningIndicators/InBlock.gif)
608
![](/Images/OutliningIndicators/InBlock.gif)
609
![](/Images/OutliningIndicators/InBlock.gif)
610
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
611
![](/Images/OutliningIndicators/InBlock.gif)
612
![](/Images/OutliningIndicators/InBlock.gif)
613
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
614
![](/Images/OutliningIndicators/InBlock.gif)
615
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
616
![](/Images/OutliningIndicators/InBlock.gif)
617
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
618
![](/Images/OutliningIndicators/InBlock.gif)
619
![](/Images/OutliningIndicators/InBlock.gif)
620
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
621
![](/Images/OutliningIndicators/InBlock.gif)
622
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
623
![](/Images/OutliningIndicators/InBlock.gif)
624
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
625
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
626
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
627
![](/Images/OutliningIndicators/None.gif)
1
using System;
2![](/Images/OutliningIndicators/None.gif)
3
namespace JoeyCodeGenerator
4
{
5
[Flags]
6
public enum ProgrammingLanguageType
7
{
8
Default = 0,
9
CSharp = 1,
10
VBDotNet = 2,
11
Java = 3
12
}
13
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Data;
5
using System.IO;
6![](/Images/OutliningIndicators/None.gif)
7
namespace JoeyCodeGenerator
8
{
9
public static class Routine
10
{
11
public static void WriteFile(string filePath, string content)
12
{
13
if (!Directory.Exists(Path.GetDirectoryName(filePath)))
14
{
15
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
16
}
17
using (StreamWriter sw = new StreamWriter(filePath))
18
{
19
sw.Write(content);
20
}
21
}
22
public static string ConvertFromDatabaseToSqlDbType(string columnType)
23
{
24
string sdt = string.Empty;
25
//Bigint
26
if (columnType.ToLower() == "Bigint".ToLower())
27
{
28
sdt = "SqlDbType.BigInt";
29
}
30
else if (columnType.ToLower() == "bit".ToLower())
31
{//bit
32
sdt = "SqlDbType.Bit";
33
}
34
else if (columnType.ToLower() == "datetime".ToLower())
35
{//datetime
36
sdt = "SqlDbType.DateTime";
37
}
38
else if (columnType.ToLower() == "decimal".ToLower())
39
{//decimal
40
sdt = "SqlDbType.Decimal";
41
}
42
else if (columnType.ToLower() == "Float".ToLower())
43
{//Float
44
sdt = "SqlDbType.Float";
45
}
46
else if (columnType.ToLower() == "image".ToLower())
47
{//image
48
sdt = "SqlDbType.Image";
49
}
50
else if (columnType.ToLower() == "Int".ToLower())
51
{//Int
52
sdt = "SqlDbType.Int";
53
}
54
else if (columnType.ToLower() == "Ntext".ToLower())
55
{//Ntext
56
sdt = "SqlDbType.NText";
57
}
58
else if (columnType.ToLower() == "Real".ToLower())
59
{//Real
60
sdt = "SqlDbType.Real";
61
}
62
else if (columnType.ToLower() == "smallint".ToLower())
63
{//smallint
64
sdt = "SqlDbType.SmallInt";
65
}
66
else if (columnType.ToLower() == "tinyint".ToLower())
67
{//tinyint
68
sdt = "SqlDbType.TinyInt";
69
}
70
else if (columnType.ToLower() == "smallmoney".ToLower())
71
{//
72
return "SqlDbType.SmallMoney";
73
}
74
else if (columnType.ToLower() == "text".ToLower())
75
{//text
76
return "SqlDbType.Text";
77
}
78
else if (columnType.ToLower() == "timestamp".ToLower())
79
{//
80
return "SqlDbType.Timestamp";
81
}
82
else if (columnType.ToLower() == "binary".ToLower())
83
{//binary
84
return "SqlDbType.Binary";
85
}
86
else if (columnType.ToLower() == "uniqueidentifier".ToLower())
87
{//uniqueidentifier
88
return "SqlDbType.UniqueIdentifier";
89
}
90
else if (columnType.ToLower() == "varbinary".ToLower())
91
{//varbinary
92
return "SqlDbType.VarBinary";
93
}
94
else if (columnType.ToLower() == "varchar".ToLower())
95
{//varchar
96
return "SqlDbType.VarChar";
97
}
98
else if (columnType.ToLower() == "sql_variant".ToLower())
99
{//sql_variant
100
return "SqlDbType.Variant";
101
}
102
else if (columnType.ToLower() == "Money".ToLower())
103
{//Money
104
return "SqlDbType.Money";
105
}
106
else if (columnType.ToLower() == "nchar".ToLower())
107
{//nchar
108
return "SqlDbType.NChar";
109
}
110
else if (columnType.ToLower() == "nvarchar".ToLower())
111
{//nvarchar
112
return "SqlDbType.NVarChar";
113
}
114
else if (columnType.ToLower() == "smalldatetime".ToLower())
115
{//smalldatetime
116
return "SqlDbType.SmallDateTime";
117
}
118
else if (columnType.ToLower() == "Char".ToLower())
119
{//Char
120
return "SqlDbType.Char";
121
}
122
else
123
{//sql_variant
124
sdt = "SqlDbType.Variant";
125
}
126
return sdt;
127
}
128
public static string ConvertFromDatabaseToLanguage(string input, ProgrammingLanguageType plt, DatabaseType dt)
129
{
130
if (dt == DatabaseType.MSSQL && plt == ProgrammingLanguageType.CSharp)
131
{
132
string type = string.Empty;
133
switch (input.ToLower())
134
{
135
case "int":
136
type = "Int32";
137
break;
138
case "text":
139
type = "String";
140
break;
141
case "bigint":
142
type = "Int64";
143
break;
144
case "binary":
145
type = "System.Byte[]";
146
break;
147
case "bit":
148
type = "Boolean";
149
break;
150
case "char":
151
type = "String";
152
break;
153
case "datetime":
154
type = "System.DateTime";
155
break;
156
case "decimal":
157
type = "System.Decimal";
158
break;
159
case "float":
160
type = "System.Double";
161
break;
162
case "image":
163
type = "System.Byte[]";
164
break;
165
case "money":
166
type = "System.Decimal";
167
break;
168
case "nchar":
169
type = "String";
170
break;
171
case "ntext":
172
type = "String";
173
break;
174
case "numeric":
175
type = "System.Decimal";
176
break;
177
case "nvarchar":
178
type = "String";
179
break;
180
case "real":
181
type = "System.Single";
182
break;
183
case "smalldatetime":
184
type = "System.DateTime";
185
break;
186
case "smallint":
187
type = "Int16";
188
break;
189
case "smallmoney":
190
type = "System.Decimal";
191
break;
192
case "timestamp":
193
type = "System.DateTime";
194
break;
195
case "tinyint":
196
type = "System.Byte";
197
break;
198
case "uniqueidentifier":
199
type = "System.Guid";
200
break;
201
case "varbinary":
202
type = "System.Byte[]";
203
break;
204
case "varchar":
205
type = "String";
206
break;
207
case "variant":
208
type = "Object";
209
break;
210
default:
211
break;
212
}
213
return type;
214
}
215
else
216
{
217
return string.Empty;
218
}
219
}
220
public static DataTable GetNonePKColumns(DataTable columns, DataTable pk)
221
{
222
DataTable dt = columns.Clone();
223
foreach (DataRow dr in columns.Rows)
224
{
225
if (!IsInPKTable(dr, pk))
226
{
227![](/Images/OutliningIndicators/InBlock.gif)
228
dt.Rows.Add(dr.ItemArray);
229
}
230
}
231
return dt;
232
}
233
private static bool IsInPKTable(DataRow dr, DataTable dt)
234
{
235
foreach (DataRow tdr in dt.Rows)
236
{
237
if (dr[0].ToString() == tdr[0].ToString() && dr[1].ToString() == tdr[1].ToString())
238
{
239
return true;
240
}
241
}
242
return false;
243
}
244
}
245
}
246![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
102
![](/Images/OutliningIndicators/InBlock.gif)
103
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
106
![](/Images/OutliningIndicators/InBlock.gif)
107
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
112
![](/Images/OutliningIndicators/InBlock.gif)
113
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
114
![](/Images/OutliningIndicators/InBlock.gif)
115
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
116
![](/Images/OutliningIndicators/InBlock.gif)
117
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
120
![](/Images/OutliningIndicators/InBlock.gif)
121
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
122
![](/Images/OutliningIndicators/InBlock.gif)
123
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
130
![](/Images/OutliningIndicators/InBlock.gif)
131
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
132
![](/Images/OutliningIndicators/InBlock.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/InBlock.gif)
138
![](/Images/OutliningIndicators/InBlock.gif)
139
![](/Images/OutliningIndicators/InBlock.gif)
140
![](/Images/OutliningIndicators/InBlock.gif)
141
![](/Images/OutliningIndicators/InBlock.gif)
142
![](/Images/OutliningIndicators/InBlock.gif)
143
![](/Images/OutliningIndicators/InBlock.gif)
144
![](/Images/OutliningIndicators/InBlock.gif)
145
![](/Images/OutliningIndicators/InBlock.gif)
146
![](/Images/OutliningIndicators/InBlock.gif)
147
![](/Images/OutliningIndicators/InBlock.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/InBlock.gif)
150
![](/Images/OutliningIndicators/InBlock.gif)
151
![](/Images/OutliningIndicators/InBlock.gif)
152
![](/Images/OutliningIndicators/InBlock.gif)
153
![](/Images/OutliningIndicators/InBlock.gif)
154
![](/Images/OutliningIndicators/InBlock.gif)
155
![](/Images/OutliningIndicators/InBlock.gif)
156
![](/Images/OutliningIndicators/InBlock.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/InBlock.gif)
159
![](/Images/OutliningIndicators/InBlock.gif)
160
![](/Images/OutliningIndicators/InBlock.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/InBlock.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/InBlock.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/InBlock.gif)
167
![](/Images/OutliningIndicators/InBlock.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/InBlock.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/InBlock.gif)
172
![](/Images/OutliningIndicators/InBlock.gif)
173
![](/Images/OutliningIndicators/InBlock.gif)
174
![](/Images/OutliningIndicators/InBlock.gif)
175
![](/Images/OutliningIndicators/InBlock.gif)
176
![](/Images/OutliningIndicators/InBlock.gif)
177
![](/Images/OutliningIndicators/InBlock.gif)
178
![](/Images/OutliningIndicators/InBlock.gif)
179
![](/Images/OutliningIndicators/InBlock.gif)
180
![](/Images/OutliningIndicators/InBlock.gif)
181
![](/Images/OutliningIndicators/InBlock.gif)
182
![](/Images/OutliningIndicators/InBlock.gif)
183
![](/Images/OutliningIndicators/InBlock.gif)
184
![](/Images/OutliningIndicators/InBlock.gif)
185
![](/Images/OutliningIndicators/InBlock.gif)
186
![](/Images/OutliningIndicators/InBlock.gif)
187
![](/Images/OutliningIndicators/InBlock.gif)
188
![](/Images/OutliningIndicators/InBlock.gif)
189
![](/Images/OutliningIndicators/InBlock.gif)
190
![](/Images/OutliningIndicators/InBlock.gif)
191
![](/Images/OutliningIndicators/InBlock.gif)
192
![](/Images/OutliningIndicators/InBlock.gif)
193
![](/Images/OutliningIndicators/InBlock.gif)
194
![](/Images/OutliningIndicators/InBlock.gif)
195
![](/Images/OutliningIndicators/InBlock.gif)
196
![](/Images/OutliningIndicators/InBlock.gif)
197
![](/Images/OutliningIndicators/InBlock.gif)
198
![](/Images/OutliningIndicators/InBlock.gif)
199
![](/Images/OutliningIndicators/InBlock.gif)
200
![](/Images/OutliningIndicators/InBlock.gif)
201
![](/Images/OutliningIndicators/InBlock.gif)
202
![](/Images/OutliningIndicators/InBlock.gif)
203
![](/Images/OutliningIndicators/InBlock.gif)
204
![](/Images/OutliningIndicators/InBlock.gif)
205
![](/Images/OutliningIndicators/InBlock.gif)
206
![](/Images/OutliningIndicators/InBlock.gif)
207
![](/Images/OutliningIndicators/InBlock.gif)
208
![](/Images/OutliningIndicators/InBlock.gif)
209
![](/Images/OutliningIndicators/InBlock.gif)
210
![](/Images/OutliningIndicators/InBlock.gif)
211
![](/Images/OutliningIndicators/InBlock.gif)
212
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
213
![](/Images/OutliningIndicators/InBlock.gif)
214
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
215
![](/Images/OutliningIndicators/InBlock.gif)
216
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
217
![](/Images/OutliningIndicators/InBlock.gif)
218
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
219
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
220
![](/Images/OutliningIndicators/InBlock.gif)
221
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
222
![](/Images/OutliningIndicators/InBlock.gif)
223
![](/Images/OutliningIndicators/InBlock.gif)
224
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
225
![](/Images/OutliningIndicators/InBlock.gif)
226
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
227
![](/Images/OutliningIndicators/InBlock.gif)
228
![](/Images/OutliningIndicators/InBlock.gif)
229
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
230
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
231
![](/Images/OutliningIndicators/InBlock.gif)
232
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
233
![](/Images/OutliningIndicators/InBlock.gif)
234
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
235
![](/Images/OutliningIndicators/InBlock.gif)
236
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
237
![](/Images/OutliningIndicators/InBlock.gif)
238
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
239
![](/Images/OutliningIndicators/InBlock.gif)
240
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
241
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
242
![](/Images/OutliningIndicators/InBlock.gif)
243
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
244
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
245
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
246
![](/Images/OutliningIndicators/None.gif)