2007-02-20 Adar Wesley <adarw@mainsoft.com>
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / SqlDataSourceTest.cs
1 //\r
2 // Tests for System.Web.UI.WebControls.SqlDataSource\r
3 //\r
4 // Author:\r
5 //      Chris Toshok (toshok@novell.com)\r
6 //\r
7 \r
8 //\r
9 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)\r
10 //\r
11 // Permission is hereby granted, free of charge, to any person obtaining\r
12 // a copy of this software and associated documentation files (the\r
13 // "Software"), to deal in the Software without restriction, including\r
14 // without limitation the rights to use, copy, modify, merge, publish,\r
15 // distribute, sublicense, and/or sell copies of the Software, and to\r
16 // permit persons to whom the Software is furnished to do so, subject to\r
17 // the following conditions:\r
18 // \r
19 // The above copyright notice and this permission notice shall be\r
20 // included in all copies or substantial portions of the Software.\r
21 // \r
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
29 //\r
30 \r
31 #if NET_2_0\r
32 \r
33 using NUnit.Framework;\r
34 using System;\r
35 using System.Configuration;\r
36 using System.Data.Common;\r
37 using System.Data.SqlClient;\r
38 using System.IO;\r
39 using System.Globalization;\r
40 using System.Web;\r
41 using System.Web.UI;\r
42 using System.Web.UI.WebControls;\r
43 using System.Collections;\r
44 using System.Text;\r
45 \r
46 namespace MonoTests.System.Web.UI.WebControls\r
47 {\r
48         class SqlPoker : SqlDataSource\r
49         {\r
50                 public SqlPoker ()\r
51                 {\r
52                         TrackViewState ();\r
53                 }\r
54 \r
55                 public object SaveToViewState ()\r
56                 {\r
57                         return SaveViewState ();\r
58                 }\r
59 \r
60                 public void LoadFromViewState (object savedState)\r
61                 {\r
62                         LoadViewState (savedState);\r
63                 }\r
64         }\r
65 \r
66         class CustomSqlDataSourceView : SqlDataSourceView\r
67         {\r
68                 public CustomSqlDataSourceView (SqlDataSource owner,string name,HttpContext context):base(owner,name,context)\r
69                 {\r
70                 }\r
71                 \r
72                 public new int ExecuteDelete (global::System.Collections.IDictionary keys, global::System.Collections.IDictionary oldValues)\r
73                 {\r
74                         return base.ExecuteDelete (keys, oldValues);\r
75                 }\r
76 \r
77                 public new int ExecuteInsert (global::System.Collections.IDictionary values)\r
78                 {\r
79                         return base.ExecuteInsert (values);\r
80                 }\r
81 \r
82                 public new global::System.Collections.IEnumerable ExecuteSelect (DataSourceSelectArguments arguments)\r
83                 {\r
84                         return base.ExecuteSelect (arguments);\r
85                 }\r
86 \r
87                 public new int ExecuteUpdate (global::System.Collections.IDictionary keys, global::System.Collections.IDictionary values, global::System.Collections.IDictionary oldValues)\r
88                 {\r
89                         return base.ExecuteUpdate (keys, values, oldValues);\r
90                 }\r
91 \r
92                 \r
93         }\r
94 \r
95         [TestFixture]\r
96         public class SqlDataSourceTest\r
97         {\r
98                 [SetUp]\r
99                 public void SetUp ()\r
100                 {\r
101                         SqlDataSourceTest.CustomEventParameterCollection = null;\r
102                         SqlDataSourceTest.PassedParameters = "";\r
103                 }\r
104 \r
105                 [Test]\r
106                 public void Defaults ()\r
107                 {\r
108                         SqlPoker sql = new SqlPoker ();\r
109                         Assert.AreEqual ("", sql.CacheKeyDependency, "A1");\r
110                         Assert.IsTrue (sql.CancelSelectOnNullParameter, "A2");\r
111                         Assert.AreEqual (ConflictOptions.OverwriteChanges, sql.ConflictDetection, "A3");\r
112                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.DeleteCommandType, "A4");\r
113                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.InsertCommandType, "A5");\r
114                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.SelectCommandType, "A6");\r
115                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.UpdateCommandType, "A7");\r
116                         Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "A8");\r
117                         Assert.AreEqual ("", sql.SqlCacheDependency, "A9");\r
118                         Assert.AreEqual ("", sql.SortParameterName, "A10");\r
119                         Assert.AreEqual (0, sql.CacheDuration, "A11");\r
120                         Assert.AreEqual (DataSourceCacheExpiry.Absolute, sql.CacheExpirationPolicy, "A12");\r
121                         Assert.IsFalse (sql.EnableCaching, "A13");\r
122                         Assert.AreEqual ("", sql.ProviderName, "A14");\r
123                         Assert.AreEqual ("", sql.ConnectionString, "A15");\r
124                         Assert.AreEqual (SqlDataSourceMode.DataSet, sql.DataSourceMode, "A16");\r
125                         Assert.AreEqual ("", sql.DeleteCommand, "A17");\r
126                         Assert.IsNotNull (sql.DeleteParameters, "A18");\r
127                         Assert.AreEqual (0, sql.DeleteParameters.Count, "A18.1");\r
128                         Assert.IsNotNull (sql.FilterParameters, "A19");\r
129                         Assert.AreEqual (0, sql.FilterParameters.Count, "A19.1");\r
130                         Assert.AreEqual ("", sql.InsertCommand, "A20");\r
131                         Assert.IsNotNull (sql.InsertParameters, "A21");\r
132                         Assert.AreEqual (0, sql.InsertParameters.Count, "A21.1");\r
133                         Assert.AreEqual ("", sql.SelectCommand, "A22");\r
134                         Assert.IsNotNull (sql.SelectParameters, "A23");\r
135                         Assert.AreEqual (0, sql.SelectParameters.Count, "A23.1");\r
136                         Assert.AreEqual ("", sql.UpdateCommand, "A24");\r
137                         Assert.IsNotNull (sql.UpdateParameters, "A25");\r
138                         Assert.AreEqual (0, sql.UpdateParameters.Count, "A25.1");\r
139                         Assert.AreEqual ("", sql.FilterExpression, "A26");\r
140                 }\r
141 \r
142                 [Test]\r
143                 public void ViewState ()\r
144                 {\r
145                         SqlPoker sql = new SqlPoker ();\r
146 \r
147                         sql.CacheKeyDependency = "hi";\r
148                         sql.CancelSelectOnNullParameter = false;\r
149                         sql.ConflictDetection = ConflictOptions.CompareAllValues;\r
150                         sql.DeleteCommandType = SqlDataSourceCommandType.StoredProcedure;\r
151                         sql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;\r
152                         sql.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;\r
153                         sql.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;\r
154                         sql.OldValuesParameterFormatString = "{1}";\r
155                         sql.SqlCacheDependency = "hi";\r
156                         sql.SortParameterName = "hi";\r
157                         sql.CacheDuration = 1;\r
158                         sql.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;\r
159                         sql.EnableCaching = true;\r
160                         sql.DataSourceMode = SqlDataSourceMode.DataReader;\r
161                         sql.DeleteCommand = "DELETE foo";\r
162                         sql.InsertCommand = "INSERT foo";\r
163                         sql.SelectCommand = "SELECT foo";\r
164                         sql.UpdateCommand = "UPDATE foo";\r
165                         sql.FilterExpression = "hi";\r
166 \r
167                         Assert.AreEqual ("hi", sql.CacheKeyDependency, "A1");\r
168                         Assert.IsFalse (sql.CancelSelectOnNullParameter, "A2");\r
169                         Assert.AreEqual (ConflictOptions.CompareAllValues, sql.ConflictDetection, "A3");\r
170                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.DeleteCommandType, "A4");\r
171                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.InsertCommandType, "A5");\r
172                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.SelectCommandType, "A6");\r
173                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.UpdateCommandType, "A7");\r
174                         Assert.AreEqual ("{1}", sql.OldValuesParameterFormatString, "A8");\r
175                         Assert.AreEqual ("hi", sql.SqlCacheDependency, "A9");\r
176                         Assert.AreEqual ("hi", sql.SortParameterName, "A10");\r
177                         Assert.AreEqual (1, sql.CacheDuration, "A11");\r
178                         Assert.AreEqual (DataSourceCacheExpiry.Sliding, sql.CacheExpirationPolicy, "A12");\r
179                         Assert.IsTrue (sql.EnableCaching, "A13");\r
180                         Assert.AreEqual (SqlDataSourceMode.DataReader, sql.DataSourceMode, "A16");\r
181                         Assert.AreEqual ("DELETE foo", sql.DeleteCommand, "A17");\r
182                         Assert.AreEqual ("INSERT foo", sql.InsertCommand, "A20");\r
183                         Assert.AreEqual ("SELECT foo", sql.SelectCommand, "A22");\r
184                         Assert.AreEqual ("UPDATE foo", sql.UpdateCommand, "A24");\r
185                         Assert.AreEqual ("hi", sql.FilterExpression, "A26");\r
186 \r
187                         object state = sql.SaveToViewState ();\r
188                         Assert.IsNull (state, "ViewState is null");\r
189 \r
190                         sql = new SqlPoker ();\r
191                         sql.LoadFromViewState (state);\r
192 \r
193                         Assert.AreEqual ("", sql.CacheKeyDependency, "B1");\r
194                         Assert.IsTrue (sql.CancelSelectOnNullParameter, "B2");\r
195                         Assert.AreEqual (ConflictOptions.OverwriteChanges, sql.ConflictDetection, "B3");\r
196                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.DeleteCommandType, "B4");\r
197                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.InsertCommandType, "B5");\r
198                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.SelectCommandType, "B6");\r
199                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.UpdateCommandType, "B7");\r
200                         Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "B8");\r
201                         Assert.AreEqual ("", sql.SqlCacheDependency, "B9");\r
202                         Assert.AreEqual ("", sql.SortParameterName, "B10");\r
203                         Assert.AreEqual (0, sql.CacheDuration, "B11");\r
204                         Assert.AreEqual (DataSourceCacheExpiry.Absolute, sql.CacheExpirationPolicy, "B12");\r
205                         Assert.IsFalse (sql.EnableCaching, "B13");\r
206                         Assert.AreEqual (SqlDataSourceMode.DataSet, sql.DataSourceMode, "B16");\r
207                         Assert.AreEqual ("", sql.DeleteCommand, "B17");\r
208                         Assert.IsNotNull (sql.DeleteParameters, "B18");\r
209                         Assert.AreEqual (0, sql.DeleteParameters.Count, "B18.1");\r
210                         Assert.IsNotNull (sql.FilterParameters, "B19");\r
211                         Assert.AreEqual (0, sql.FilterParameters.Count, "B19.1");\r
212                         Assert.AreEqual ("", sql.InsertCommand, "B20");\r
213                         Assert.IsNotNull (sql.InsertParameters, "B21");\r
214                         Assert.AreEqual (0, sql.InsertParameters.Count, "B21.1");\r
215                         Assert.AreEqual ("", sql.SelectCommand, "B22");\r
216                         Assert.IsNotNull (sql.SelectParameters, "B23");\r
217                         Assert.AreEqual (0, sql.SelectParameters.Count, "B23.1");\r
218                         Assert.AreEqual ("", sql.UpdateCommand, "B24");\r
219                         Assert.IsNotNull (sql.UpdateParameters, "B25");\r
220                         Assert.AreEqual (0, sql.UpdateParameters.Count, "B25.1");\r
221                         Assert.AreEqual ("", sql.FilterExpression, "B26");\r
222                 }\r
223 \r
224                 // Help parameter for Asserts\r
225                 private static SqlParameterCollection CustomEventParameterCollection;\r
226                 private static string PassedParameters;\r
227                 \r
228                 [Test]\r
229                 public void ExecuteSelect ()\r
230                 {\r
231                         SqlPoker sql = new SqlPoker();\r
232                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
233                         sql.ProviderName = "System.Data.SqlClient";\r
234                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
235                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
236                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
237                         view.OldValuesParameterFormatString = "origin_{0}";\r
238                 \r
239                         view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "10"));\r
240                         view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting);\r
241                         view.Select (new DataSourceSelectArguments ());\r
242                         Assert.IsNotNull (CustomEventParameterCollection, "Select event not fired");\r
243                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
244                         Assert.AreEqual ("@ProductID", CustomEventParameterCollection[0].ParameterName, "Parameter name");\r
245                         Assert.AreEqual (10, CustomEventParameterCollection[0].Value, "Parameter value");\r
246                 }\r
247 \r
248                 [Test]\r
249                 public void ExecuteSelect2 () \r
250                 {\r
251                         SqlPoker sql = new SqlPoker ();\r
252                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
253                         sql.ProviderName = "System.Data.SqlClient";\r
254                         sql.DataSourceMode = SqlDataSourceMode.DataReader;\r
255                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
256                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
257                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
258                         view.OldValuesParameterFormatString = "origin_{0}";\r
259 \r
260                         view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "10"));\r
261                         view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting);\r
262                         view.Select (new DataSourceSelectArguments ());\r
263                         Assert.IsNotNull (CustomEventParameterCollection, "Select event not fired");\r
264                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
265                         Assert.AreEqual ("@ProductID", CustomEventParameterCollection [0].ParameterName, "Parameter name");\r
266                         Assert.AreEqual (10, CustomEventParameterCollection [0].Value, "Parameter value");\r
267                 }\r
268 \r
269                 [Test]\r
270                 public void ExecuteUpdate ()\r
271                 {\r
272                         SqlPoker sql = new SqlPoker ();\r
273                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
274                         sql.ProviderName = "System.Data.SqlClient";\r
275                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
276                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
277                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
278                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
279                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
280                         view.OldValuesParameterFormatString = "origin_{0}";\r
281                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
282                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
283                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
284                         view.Update (null, null, null);\r
285                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
286                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
287                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
288                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
289                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
290                         Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
291                 }\r
292 \r
293                 [Test]\r
294                 public void ExecuteInsert ()\r
295                 {\r
296                         SqlPoker sql = new SqlPoker ();\r
297                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
298                         sql.ProviderName = "System.Data.SqlClient";\r
299                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
300                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
301                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
302                         view.InsertCommandType = SqlDataSourceCommandType.Text;\r
303                         view.InsertCommand = "INSERT INTO Table1 (UserId, UserName) VALUES ({0},{1})";\r
304                         view.InsertParameters.Add (new Parameter ("UserId", TypeCode.Int32, "15"));\r
305                         view.InsertParameters.Add (new Parameter ("UserName", TypeCode.String, "newuser"));\r
306                         view.OldValuesParameterFormatString = "origin_{0}";\r
307                         view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting);\r
308                         view.Insert (null);\r
309                         Assert.IsNotNull (CustomEventParameterCollection, "Insert event not fired");\r
310                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
311                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[0].ParameterName, "Parameter name#2");\r
312                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#2");\r
313                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[1].ParameterName, "Parameter name#1");\r
314                         Assert.AreEqual ("newuser", CustomEventParameterCollection[1].Value, "Parameter value#1");\r
315                 }\r
316 \r
317                 [Test]\r
318                 public void ExecuteInsertWithCollection ()\r
319                 {\r
320                         SqlPoker sql = new SqlPoker ();\r
321                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
322                         sql.ProviderName = "System.Data.SqlClient";\r
323                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
324                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
325                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
326                         view.InsertCommandType = SqlDataSourceCommandType.Text;\r
327                         view.InsertCommand = "INSERT INTO products (UserId, UserName) VALUES ({0},{1})";\r
328                         view.InsertParameters.Add (new Parameter ("UserId", TypeCode.Int32, "15"));\r
329                         view.InsertParameters.Add (new Parameter ("UserName", TypeCode.String, "newuser"));\r
330                         view.OldValuesParameterFormatString = "origin_{0}";\r
331                         view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting);\r
332                         Hashtable value = new Hashtable ();\r
333                         value.Add ("Description", "TestDescription");\r
334                         view.Insert (value);\r
335                         Assert.IsNotNull (CustomEventParameterCollection, "Insert event not fired");\r
336                         Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count");\r
337                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
338                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
339                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
340                         Assert.AreEqual ("newuser", CustomEventParameterCollection[1].Value, "Parameter value#2");\r
341                         Assert.AreEqual ("@Description", CustomEventParameterCollection[2].ParameterName, "Parameter name#3");\r
342                         Assert.AreEqual ("TestDescription", CustomEventParameterCollection[2].Value, "Parameter value#3");\r
343                 }\r
344 \r
345                 [Test]\r
346                 public void ExecuteDelete ()\r
347                 {\r
348                         SqlPoker sql = new SqlPoker ();\r
349                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
350                         sql.ProviderName = "System.Data.SqlClient";\r
351                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
352                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
353                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
354                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
355                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
356                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
357                         view.OldValuesParameterFormatString = "origin_{0}";\r
358                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
359                         view.Delete (null, null);\r
360                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
361                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
362                         Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
363                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
364                 }\r
365 \r
366                 [Test]\r
367                 public void ExecuteDeleteWithOldValues ()\r
368                 {\r
369                         SqlPoker sql = new SqlPoker ();\r
370                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
371                         sql.ProviderName = "System.Data.SqlClient";\r
372                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
373                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
374                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
375                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
376                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
377                         view.DeleteParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "15"));\r
378                         view.OldValuesParameterFormatString = "origin_{0}";\r
379                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
380                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
381                         Hashtable oldvalue = new Hashtable ();\r
382                         oldvalue.Add ("ProductID", 10);\r
383                         view.Delete (null,oldvalue );\r
384                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
385                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
386                         Assert.AreEqual ("@origin_ProductID", CustomEventParameterCollection[0].ParameterName, "Parameter name#2");\r
387                         Assert.AreEqual (10, CustomEventParameterCollection[0].Value, "Parameter value#2");\r
388                 }\r
389 \r
390                 [Test]\r
391                 public void ExecuteDeleteWithMergedOldValues ()\r
392                 {\r
393                         SqlPoker sql = new SqlPoker ();\r
394                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
395                         sql.ProviderName = "System.Data.SqlClient";\r
396                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
397                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
398                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
399                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
400                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
401                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
402                         view.OldValuesParameterFormatString = "origin_{0}";\r
403                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
404                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
405                         Hashtable oldvalue = new Hashtable ();\r
406                         oldvalue.Add ("Desc", "Description");\r
407                         view.Delete (null, oldvalue);\r
408                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
409                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
410                         Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
411                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
412                         Assert.AreEqual ("@origin_Desc", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
413                         Assert.AreEqual ("Description", CustomEventParameterCollection[1].Value, "Parameter value#2");\r
414                 }\r
415 \r
416                 [Test]\r
417                 public void ExecuteDeleteWithMergedValues ()\r
418                 {\r
419                         SqlPoker sql = new SqlPoker ();\r
420                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
421                         sql.ProviderName = "System.Data.SqlClient";\r
422                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
423                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
424                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
425                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
426                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
427                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
428                         view.OldValuesParameterFormatString = "origin_{0}";\r
429                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
430                         Hashtable value = new Hashtable ();\r
431                         value.Add ("Desc", "Description");\r
432                         view.Delete (value, null);\r
433                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
434                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
435                         Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
436                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
437                         Assert.AreEqual ("@origin_Desc", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
438                         Assert.AreEqual ("Description", CustomEventParameterCollection[1].Value, "Parameter value#2");\r
439                 }\r
440 \r
441                 [Test]\r
442                 public void ExecuteDelete_KeysAndOldValues_OverwriteChanges () \r
443                 {\r
444                         SqlPoker sql = new SqlPoker ();\r
445                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
446                         sql.ProviderName = "System.Data.SqlClient";\r
447                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
448                         IDictionary keys;\r
449                         IDictionary values;\r
450                         IDictionary oldValues;\r
451                         InitializeView (view, out keys, out values, out oldValues);\r
452 \r
453                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
454 \r
455                         view.Delete (keys, oldValues);\r
456 \r
457                         Assert.IsNotNull (CustomEventParameterCollection, "KeysAndOldValues_OverwriteChanges");\r
458                         Assert.AreEqual ("String:@origin_ProductID=k_10", PassedParameters, "KeysAndOldValues_OverwriteChanges Values");\r
459                 }\r
460 \r
461                 [Test]\r
462                 public void ExecuteDelete_KeysAndOldValues_CompareAllValues () \r
463                 {\r
464                         SqlPoker sql = new SqlPoker ();\r
465                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
466                         sql.ProviderName = "System.Data.SqlClient";\r
467                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
468                         IDictionary keys;\r
469                         IDictionary values;\r
470                         IDictionary oldValues;\r
471                         InitializeView (view, out keys, out values, out oldValues);\r
472 \r
473                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
474 \r
475                         view.Delete (keys, oldValues);\r
476 \r
477                         Assert.IsNotNull (CustomEventParameterCollection, "KeysAndOldValues_CompareAllValues");\r
478                         Assert.AreEqual ("String:@origin_ProductID=ov_10, String:@origin_Description=ov_Beautifull, String:@origin_Name=ov_ColorTV", PassedParameters, "KeysAndOldValues_CompareAllValues Values");\r
479                 }\r
480 \r
481                 [Test]\r
482                 public void ExecuteDelete_KeysAndOldValues_CompareAllValues2 () \r
483                 {\r
484                         SqlPoker sql = new SqlPoker ();\r
485                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
486                         sql.ProviderName = "System.Data.SqlClient";\r
487                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
488                         IDictionary keys;\r
489                         IDictionary values;\r
490                         IDictionary oldValues;\r
491                         InitializeView (view, out keys, out values, out oldValues);\r
492                         view.DeleteParameters.Add ("origin_ProductID", "po_10");\r
493 \r
494                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
495 \r
496                         view.Delete (keys, oldValues);\r
497 \r
498                         Assert.IsNotNull (CustomEventParameterCollection, "ExecuteDelete_KeysAndOldValues_CompareAllValues2");\r
499                         string [] expectedParams = new string []\r
500                                                 { \r
501                                                         "String:@origin_ProductID=ov_10", \r
502                                                         "String:@origin_Description=ov_Beautifull",\r
503                                                         "String:@origin_Name=ov_ColorTV" \r
504                                                 };\r
505                         string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries);\r
506                         Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count");\r
507                         ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'");\r
508                 }\r
509 \r
510                 private static void ValidatePassedParams (string [] expectedParams, string [] actualValues, string errorMessageFormat) \r
511                 {\r
512                         foreach (string eps in expectedParams) {\r
513                                 bool found = false;\r
514                                 foreach (string aps in actualValues) {\r
515                                         if (eps == aps) {\r
516                                                 found = true;\r
517                                                 break;\r
518                                         }\r
519                                 }\r
520                                 Assert.IsTrue (found, String.Format (errorMessageFormat, eps));\r
521                         }\r
522                 }\r
523 \r
524                 private void InitializeView (CustomSqlDataSourceView view, out IDictionary keys, out IDictionary values, out IDictionary oldValues) \r
525                 {\r
526                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
527                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
528                         view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_10"));\r
529                         view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting);\r
530 \r
531                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
532                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
533                         view.DeleteParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_10"));\r
534                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
535 \r
536                         view.InsertCommandType = SqlDataSourceCommandType.Text;\r
537                         view.InsertCommand = "INSERT INTO products (ProductID, Name, Description) VALUES (@ProductID, @Name, @Description)";\r
538                         view.InsertParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_15"));\r
539                         view.InsertParameters.Add (new Parameter ("Name", TypeCode.String, "p_NewProduct"));\r
540                         view.InsertParameters.Add (new Parameter ("Description", TypeCode.String, "p_Description"));\r
541                         view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting);\r
542 \r
543                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
544                         view.UpdateCommand = "UPDATE products SET Name = @Name, Description = @Description WHERE ProductID = @ProductID";\r
545                         view.UpdateParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_15"));\r
546                         view.UpdateParameters.Add (new Parameter ("Name", TypeCode.String, "p_UpdatedProduct"));\r
547                         view.UpdateParameters.Add (new Parameter ("Description", TypeCode.String, "p_UpdatedDescription"));\r
548                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
549 \r
550                         view.OldValuesParameterFormatString = "origin_{0}";\r
551 \r
552                         keys = new Hashtable ();\r
553                         values = new Hashtable ();\r
554                         oldValues = new Hashtable ();\r
555 \r
556                         keys.Add ("ProductID", "k_10");\r
557 \r
558                         values.Add ("ProductID", "n_10");\r
559                         values.Add ("Name", "n_ColorTV");\r
560                         values.Add ("Description", "n_Beautifull");\r
561 \r
562                         oldValues.Add ("ProductID", "ov_10");\r
563                         oldValues.Add ("Name", "ov_ColorTV");\r
564                         oldValues.Add ("Description", "ov_Beautifull");                 \r
565                 }\r
566 \r
567                 [Test]\r
568                 public void ExecuteUpdateWithOldValues ()\r
569                 {\r
570                         SqlPoker sql = new SqlPoker ();\r
571                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
572                         sql.ProviderName = "System.Data.SqlClient";\r
573                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
574                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
575                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
576                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
577                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
578                         view.OldValuesParameterFormatString = "origin_{0}";\r
579                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
580                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
581                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
582                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
583                         Hashtable oldvalue = new Hashtable ();\r
584                         oldvalue.Add ("UserId", 2);\r
585                         view.Update (null, null, oldvalue);\r
586                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
587                         Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count");\r
588                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
589                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
590                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
591                         Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
592                         Assert.AreEqual ("@origin_UserId", CustomEventParameterCollection[2].ParameterName, "Parameter name#3");\r
593                         Assert.AreEqual (2, CustomEventParameterCollection[2].Value, "Parameter value#3");\r
594                 }\r
595 \r
596                 [Test]\r
597                 public void ExecuteUpdateWithOverwriteParameters ()\r
598                 {\r
599                         SqlPoker sql = new SqlPoker ();\r
600                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
601                         sql.ProviderName = "System.Data.SqlClient";\r
602                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
603                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
604                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
605                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
606                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
607                         view.OldValuesParameterFormatString = "origin_{0}";\r
608                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
609                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
610                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
611                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
612                         Hashtable value = new Hashtable ();\r
613                         value.Add ("UserId", 2);\r
614                         view.Update (value, null, null);\r
615                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
616                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
617                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
618                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
619                         Assert.AreEqual ("@origin_UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
620                         Assert.AreEqual (2, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
621                 }\r
622 \r
623                 [Test]\r
624                 public void ExecuteUpdateWithMargeParameters ()\r
625                 {\r
626                         SqlPoker sql = new SqlPoker ();\r
627                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
628                         sql.ProviderName = "System.Data.SqlClient";\r
629                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
630                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
631                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
632                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
633                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
634                         view.OldValuesParameterFormatString = "origin_{0}";\r
635                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
636                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
637                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
638                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
639                         Hashtable value = new Hashtable ();\r
640                         value.Add ("UserLName", "TestLName");\r
641                         view.Update (null, value, null);\r
642                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
643                         Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count");\r
644                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
645                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
646                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
647                         Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
648                         Assert.AreEqual ("@UserLName", CustomEventParameterCollection[2].ParameterName, "Parameter name#3");\r
649                         Assert.AreEqual ("TestLName", CustomEventParameterCollection[2].Value, "Parameter value#3");\r
650                 }\r
651 \r
652                 [Test]\r
653                 public void ExecuteUpdate_KeysValuesAndOldValues_OverwriteChanges () \r
654                 {\r
655                         SqlPoker sql = new SqlPoker ();\r
656                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
657                         sql.ProviderName = "System.Data.SqlClient";\r
658                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
659                         IDictionary keys;\r
660                         IDictionary values;\r
661                         IDictionary oldValues;\r
662                         InitializeView (view, out keys, out values, out oldValues);\r
663 \r
664                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
665 \r
666                         view.Update (keys, values, oldValues);\r
667 \r
668                         Assert.IsNotNull (CustomEventParameterCollection, "ExecuteUpdate_KeysValuesAndOldValues_OverwriteChanges");\r
669                         string [] expectedParams = new string []\r
670                                                 { \r
671                                                         "String:@ProductID=n_10", \r
672                                                         "String:@Name=n_ColorTV", \r
673                                                         "String:@Description=n_Beautifull",\r
674                                                         "String:@origin_ProductID=k_10" \r
675                                                 };\r
676                         string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries);\r
677                         Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count");\r
678                         ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'");\r
679                 }\r
680 \r
681                 [Test]\r
682                 public void ExecuteUpdate_KeysValuesAndOldValues_CompareAllValues () \r
683                 {\r
684                         SqlPoker sql = new SqlPoker ();\r
685                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
686                         sql.ProviderName = "System.Data.SqlClient";\r
687                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
688                         IDictionary keys;\r
689                         IDictionary values;\r
690                         IDictionary oldValues;\r
691                         InitializeView (view, out keys, out values, out oldValues);\r
692 \r
693                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
694 \r
695                         view.Update (keys, values, oldValues);\r
696 \r
697                         Assert.IsNotNull (CustomEventParameterCollection, "ExecuteUpdate_KeysValuesAndOldValues_CompareAllValues");\r
698                         string [] expectedParams = new string []\r
699                                                 { \r
700                                                         "String:@ProductID=n_10", \r
701                                                         "String:@Name=n_ColorTV", \r
702                                                         "String:@Description=n_Beautifull",\r
703                                                         "String:@origin_ProductID=ov_10", \r
704                                                         "String:@origin_Name=ov_ColorTV", \r
705                                                         "String:@origin_Description=ov_Beautifull",\r
706                                                 };\r
707                         string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries);\r
708                         Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count");\r
709                         ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'");\r
710                 }\r
711 \r
712                 void view_Updating (object sender, SqlDataSourceCommandEventArgs e)\r
713                 {\r
714                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
715                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
716                         e.Cancel = true;\r
717                 }\r
718 \r
719                 void view_Selecting (object sender, SqlDataSourceSelectingEventArgs e)\r
720                 {\r
721                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
722                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
723                         e.Cancel = true;\r
724                 }\r
725 \r
726                 void view_Inserting (object sender, SqlDataSourceCommandEventArgs e)\r
727                 {\r
728                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
729                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
730                         e.Cancel = true;\r
731                 }\r
732 \r
733                 void view_Deleting (object sender, SqlDataSourceCommandEventArgs e)\r
734                 {\r
735                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
736                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
737                         e.Cancel = true;\r
738                 }\r
739 \r
740                 private string FormatParameters (SqlParameterCollection sqlParameterCollection) \r
741                 {\r
742                         StringBuilder sb = new StringBuilder ();\r
743                         foreach (SqlParameter p in sqlParameterCollection) {\r
744                                 if (sb.Length > 0) {\r
745                                         sb.Append (", ");\r
746                                 }\r
747                                 sb.AppendFormat ("{0}:{1}={2}", p.DbType, p.ParameterName, p.Value);\r
748                         }\r
749                         return sb.ToString ();\r
750                 }\r
751 \r
752                 //exceptions \r
753                 [Test]\r
754                 [ExpectedException (typeof (NotSupportedException))]\r
755                 public void ExecuteUpdateException ()\r
756                 {\r
757                         SqlPoker sql = new SqlPoker ();\r
758                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
759                         sql.ProviderName = "System.Data.SqlClient";\r
760                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
761                         view.Update (null, null, null);\r
762                 }\r
763 \r
764                 [Test]\r
765                 [ExpectedException (typeof (NotSupportedException))]\r
766                 public void ExecuteDeleteException ()\r
767                 {\r
768                         SqlPoker sql = new SqlPoker ();\r
769                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
770                         sql.ProviderName = "System.Data.SqlClient";\r
771                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
772                         view.Delete (null, null);\r
773                 }\r
774 \r
775                 [Test]\r
776                 [ExpectedException (typeof (NotSupportedException))]\r
777                 public void ExecuteInsertException ()\r
778                 {\r
779                         SqlPoker sql = new SqlPoker ();\r
780                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
781                         sql.ProviderName = "System.Data.SqlClient";\r
782                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
783                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
784                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
785                         view.Insert (null);\r
786                 }\r
787 \r
788                 [Test]  //ConflictOptions.CompareAllValues must include old value collection\r
789                 [ExpectedException (typeof (InvalidOperationException))]\r
790                 public void ExecuteUpdateWithOldValuesException ()\r
791                 {\r
792                         SqlPoker sql = new SqlPoker ();\r
793                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
794                         sql.ProviderName = "System.Data.SqlClient";\r
795                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
796                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
797                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
798                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
799                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
800                         view.OldValuesParameterFormatString = "origin_{0}";\r
801                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
802                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
803                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
804                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
805                         view.Update (null, null, null);\r
806                 }\r
807 \r
808                 [Test] //ConflictOptions.CompareAllValues must include old value collection\r
809                 [ExpectedException (typeof (InvalidOperationException))]\r
810                 public void ExecuteDeleteWithOldValuesException ()\r
811                 {\r
812                         SqlPoker sql = new SqlPoker ();\r
813                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
814                         sql.ProviderName = "System.Data.SqlClient";\r
815                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
816                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
817                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
818                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
819                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
820                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
821                         view.OldValuesParameterFormatString = "origin_{0}";\r
822                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
823                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
824                         Hashtable oldvalue = new Hashtable ();\r
825                         oldvalue.Add ("ProductID", 10);\r
826                         view.Delete (null, null);\r
827                 }\r
828         }\r
829 }\r
830 \r
831 #endif\r