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                 // WARNING!!!!!! This information will be saved into viewstate only in mono implementation .\r
143 \r
144                 [Test]\r
145                 [Category ("NotDotNet")] // LAME SPEC: MS SqlDataSource does not appear to SaveViewState, even though MSDN says it should!\r
146                 public void ViewState ()\r
147                 {\r
148                         SqlPoker sql = new SqlPoker ();\r
149 \r
150                         sql.CacheKeyDependency = "hi";\r
151                         sql.CancelSelectOnNullParameter = false;\r
152                         sql.ConflictDetection = ConflictOptions.CompareAllValues;\r
153                         sql.DeleteCommandType = SqlDataSourceCommandType.StoredProcedure;\r
154                         sql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;\r
155                         sql.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;\r
156                         sql.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;\r
157                         sql.OldValuesParameterFormatString = "{1}";\r
158                         sql.SqlCacheDependency = "hi";\r
159                         sql.SortParameterName = "hi";\r
160                         sql.CacheDuration = 1;\r
161                         sql.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;\r
162                         sql.EnableCaching = true;\r
163                         sql.DataSourceMode = SqlDataSourceMode.DataReader;\r
164                         sql.DeleteCommand = "DELETE foo";\r
165                         sql.InsertCommand = "INSERT foo";\r
166                         sql.SelectCommand = "SELECT foo";\r
167                         sql.UpdateCommand = "UPDATE foo";\r
168                         sql.FilterExpression = "hi";\r
169 \r
170                         Assert.AreEqual ("hi", sql.CacheKeyDependency, "A1");\r
171                         Assert.IsFalse (sql.CancelSelectOnNullParameter, "A2");\r
172                         Assert.AreEqual (ConflictOptions.CompareAllValues, sql.ConflictDetection, "A3");\r
173                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.DeleteCommandType, "A4");\r
174                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.InsertCommandType, "A5");\r
175                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.SelectCommandType, "A6");\r
176                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.UpdateCommandType, "A7");\r
177                         Assert.AreEqual ("{1}", sql.OldValuesParameterFormatString, "A8");\r
178                         Assert.AreEqual ("hi", sql.SqlCacheDependency, "A9");\r
179                         Assert.AreEqual ("hi", sql.SortParameterName, "A10");\r
180                         Assert.AreEqual (1, sql.CacheDuration, "A11");\r
181                         Assert.AreEqual (DataSourceCacheExpiry.Sliding, sql.CacheExpirationPolicy, "A12");\r
182                         Assert.IsTrue (sql.EnableCaching, "A13");\r
183                         Assert.AreEqual (SqlDataSourceMode.DataReader, sql.DataSourceMode, "A16");\r
184                         Assert.AreEqual ("DELETE foo", sql.DeleteCommand, "A17");\r
185                         Assert.AreEqual ("INSERT foo", sql.InsertCommand, "A20");\r
186                         Assert.AreEqual ("SELECT foo", sql.SelectCommand, "A22");\r
187                         Assert.AreEqual ("UPDATE foo", sql.UpdateCommand, "A24");\r
188                         Assert.AreEqual ("hi", sql.FilterExpression, "A26");\r
189 \r
190                         object state = sql.SaveToViewState ();\r
191 \r
192                         sql = new SqlPoker ();\r
193                         sql.LoadFromViewState (state);\r
194 \r
195                         Assert.AreEqual ("", sql.CacheKeyDependency, "B1"); // Not in ViewState\r
196                         Assert.IsFalse (sql.CancelSelectOnNullParameter, "B2");\r
197                         Assert.AreEqual (ConflictOptions.CompareAllValues, sql.ConflictDetection, "B3");\r
198                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.DeleteCommandType, "B4");\r
199                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.InsertCommandType, "B5");\r
200                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.SelectCommandType, "B6");\r
201                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.UpdateCommandType, "B7");\r
202                         Assert.AreEqual ("{1}", sql.OldValuesParameterFormatString, "B8");\r
203                         Assert.AreEqual ("", sql.SqlCacheDependency, "B9"); // Not in ViewState\r
204                         Assert.AreEqual ("hi", sql.SortParameterName, "B10");\r
205                         Assert.AreEqual (0, sql.CacheDuration, "B11"); // Not in ViewState\r
206                         Assert.AreEqual (DataSourceCacheExpiry.Absolute, sql.CacheExpirationPolicy, "B12"); // Not in ViewState\r
207                         Assert.IsFalse (sql.EnableCaching, "B13"); // Not in ViewState\r
208                         Assert.AreEqual (SqlDataSourceMode.DataReader, sql.DataSourceMode, "B16");\r
209                         Assert.AreEqual ("DELETE foo", sql.DeleteCommand, "B17");\r
210                         Assert.IsNotNull (sql.DeleteParameters, "B18");\r
211                         Assert.AreEqual (0, sql.DeleteParameters.Count, "B18.1");\r
212                         Assert.IsNotNull (sql.FilterParameters, "B19");\r
213                         Assert.AreEqual (0, sql.FilterParameters.Count, "B19.1");\r
214                         Assert.AreEqual ("INSERT foo", sql.InsertCommand, "B20");\r
215                         Assert.IsNotNull (sql.InsertParameters, "B21");\r
216                         Assert.AreEqual (0, sql.InsertParameters.Count, "B21.1");\r
217                         Assert.AreEqual ("SELECT foo", sql.SelectCommand, "B22");\r
218                         Assert.IsNotNull (sql.SelectParameters, "B23");\r
219                         Assert.AreEqual (0, sql.SelectParameters.Count, "B23.1");\r
220                         Assert.AreEqual ("UPDATE foo", sql.UpdateCommand, "B24");\r
221                         Assert.IsNotNull (sql.UpdateParameters, "B25");\r
222                         Assert.AreEqual (0, sql.UpdateParameters.Count, "B25.1");\r
223                         Assert.AreEqual ("hi", sql.FilterExpression, "B26");\r
224                 }\r
225 \r
226                 // Help parameter for Asserts\r
227                 private static SqlParameterCollection CustomEventParameterCollection;\r
228                 private static string PassedParameters;\r
229                 \r
230                 [Test]\r
231                 public void ExecuteSelect ()\r
232                 {\r
233                         SqlPoker sql = new SqlPoker();\r
234                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
235                         sql.ProviderName = "System.Data.SqlClient";\r
236                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
237                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
238                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
239                         view.OldValuesParameterFormatString = "origin_{0}";\r
240                 \r
241                         view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "10"));\r
242                         view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting);\r
243                         view.Select (new DataSourceSelectArguments ());\r
244                         Assert.IsNotNull (CustomEventParameterCollection, "Select event not fired");\r
245                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
246                         Assert.AreEqual ("@ProductID", CustomEventParameterCollection[0].ParameterName, "Parameter name");\r
247                         Assert.AreEqual (10, CustomEventParameterCollection[0].Value, "Parameter value");\r
248                 }\r
249 \r
250                 [Test]\r
251                 public void ExecuteSelect2 () \r
252                 {\r
253                         SqlPoker sql = new SqlPoker ();\r
254                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
255                         sql.ProviderName = "System.Data.SqlClient";\r
256                         sql.DataSourceMode = SqlDataSourceMode.DataReader;\r
257                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
258                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
259                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
260                         view.OldValuesParameterFormatString = "origin_{0}";\r
261 \r
262                         view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "10"));\r
263                         view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting);\r
264                         view.Select (new DataSourceSelectArguments ());\r
265                         Assert.IsNotNull (CustomEventParameterCollection, "Select event not fired");\r
266                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
267                         Assert.AreEqual ("@ProductID", CustomEventParameterCollection [0].ParameterName, "Parameter name");\r
268                         Assert.AreEqual (10, CustomEventParameterCollection [0].Value, "Parameter value");\r
269                 }\r
270 \r
271                 [Test]\r
272                 public void ExecuteUpdate ()\r
273                 {\r
274                         SqlPoker sql = new SqlPoker ();\r
275                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
276                         sql.ProviderName = "System.Data.SqlClient";\r
277                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
278                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
279                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
280                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
281                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
282                         view.OldValuesParameterFormatString = "origin_{0}";\r
283                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
284                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
285                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
286                         view.Update (null, null, null);\r
287                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
288                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
289                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
290                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
291                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
292                         Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
293                 }\r
294 \r
295                 [Test]\r
296                 public void ExecuteInsert ()\r
297                 {\r
298                         SqlPoker sql = new SqlPoker ();\r
299                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
300                         sql.ProviderName = "System.Data.SqlClient";\r
301                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
302                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
303                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
304                         view.InsertCommandType = SqlDataSourceCommandType.Text;\r
305                         view.InsertCommand = "INSERT INTO Table1 (UserId, UserName) VALUES ({0},{1})";\r
306                         view.InsertParameters.Add (new Parameter ("UserId", TypeCode.Int32, "15"));\r
307                         view.InsertParameters.Add (new Parameter ("UserName", TypeCode.String, "newuser"));\r
308                         view.OldValuesParameterFormatString = "origin_{0}";\r
309                         view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting);\r
310                         view.Insert (null);\r
311                         Assert.IsNotNull (CustomEventParameterCollection, "Insert event not fired");\r
312                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
313                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[0].ParameterName, "Parameter name#2");\r
314                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#2");\r
315                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[1].ParameterName, "Parameter name#1");\r
316                         Assert.AreEqual ("newuser", CustomEventParameterCollection[1].Value, "Parameter value#1");\r
317                 }\r
318 \r
319                 [Test]\r
320                 public void ExecuteInsertWithCollection ()\r
321                 {\r
322                         SqlPoker sql = new SqlPoker ();\r
323                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
324                         sql.ProviderName = "System.Data.SqlClient";\r
325                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
326                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
327                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
328                         view.InsertCommandType = SqlDataSourceCommandType.Text;\r
329                         view.InsertCommand = "INSERT INTO products (UserId, UserName) VALUES ({0},{1})";\r
330                         view.InsertParameters.Add (new Parameter ("UserId", TypeCode.Int32, "15"));\r
331                         view.InsertParameters.Add (new Parameter ("UserName", TypeCode.String, "newuser"));\r
332                         view.OldValuesParameterFormatString = "origin_{0}";\r
333                         view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting);\r
334                         Hashtable value = new Hashtable ();\r
335                         value.Add ("Description", "TestDescription");\r
336                         view.Insert (value);\r
337                         Assert.IsNotNull (CustomEventParameterCollection, "Insert event not fired");\r
338                         Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count");\r
339                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
340                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
341                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
342                         Assert.AreEqual ("newuser", CustomEventParameterCollection[1].Value, "Parameter value#2");\r
343                         Assert.AreEqual ("@Description", CustomEventParameterCollection[2].ParameterName, "Parameter name#3");\r
344                         Assert.AreEqual ("TestDescription", CustomEventParameterCollection[2].Value, "Parameter value#3");\r
345                 }\r
346 \r
347                 [Test]\r
348                 public void ExecuteDelete ()\r
349                 {\r
350                         SqlPoker sql = new SqlPoker ();\r
351                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
352                         sql.ProviderName = "System.Data.SqlClient";\r
353                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
354                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
355                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
356                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
357                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
358                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
359                         view.OldValuesParameterFormatString = "origin_{0}";\r
360                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
361                         view.Delete (null, null);\r
362                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
363                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
364                         Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
365                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
366                 }\r
367 \r
368                 [Test]\r
369                 public void ExecuteDeleteWithOldValues ()\r
370                 {\r
371                         SqlPoker sql = new SqlPoker ();\r
372                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
373                         sql.ProviderName = "System.Data.SqlClient";\r
374                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
375                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
376                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
377                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
378                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
379                         view.DeleteParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "15"));\r
380                         view.OldValuesParameterFormatString = "origin_{0}";\r
381                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
382                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
383                         Hashtable oldvalue = new Hashtable ();\r
384                         oldvalue.Add ("ProductID", 10);\r
385                         view.Delete (null,oldvalue );\r
386                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
387                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
388                         Assert.AreEqual ("@origin_ProductID", CustomEventParameterCollection[0].ParameterName, "Parameter name#2");\r
389                         Assert.AreEqual (10, CustomEventParameterCollection[0].Value, "Parameter value#2");\r
390                 }\r
391 \r
392                 [Test]\r
393                 public void ExecuteDeleteWithMergedOldValues ()\r
394                 {\r
395                         SqlPoker sql = new SqlPoker ();\r
396                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
397                         sql.ProviderName = "System.Data.SqlClient";\r
398                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
399                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
400                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
401                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
402                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
403                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
404                         view.OldValuesParameterFormatString = "origin_{0}";\r
405                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
406                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
407                         Hashtable oldvalue = new Hashtable ();\r
408                         oldvalue.Add ("Desc", "Description");\r
409                         view.Delete (null, oldvalue);\r
410                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
411                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
412                         Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
413                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
414                         Assert.AreEqual ("@origin_Desc", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
415                         Assert.AreEqual ("Description", CustomEventParameterCollection[1].Value, "Parameter value#2");\r
416                 }\r
417 \r
418                 [Test]\r
419                 public void ExecuteDeleteWithMergedValues ()\r
420                 {\r
421                         SqlPoker sql = new SqlPoker ();\r
422                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
423                         sql.ProviderName = "System.Data.SqlClient";\r
424                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
425                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
426                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
427                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
428                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
429                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
430                         view.OldValuesParameterFormatString = "origin_{0}";\r
431                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
432                         Hashtable value = new Hashtable ();\r
433                         value.Add ("Desc", "Description");\r
434                         view.Delete (value, null);\r
435                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
436                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
437                         Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
438                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
439                         Assert.AreEqual ("@origin_Desc", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
440                         Assert.AreEqual ("Description", CustomEventParameterCollection[1].Value, "Parameter value#2");\r
441                 }\r
442 \r
443                 [Test]\r
444                 public void ExecuteDelete_KeysAndOldValues_OverwriteChanges () \r
445                 {\r
446                         SqlPoker sql = new SqlPoker ();\r
447                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
448                         sql.ProviderName = "System.Data.SqlClient";\r
449                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
450                         IDictionary keys;\r
451                         IDictionary values;\r
452                         IDictionary oldValues;\r
453                         InitializeView (view, out keys, out values, out oldValues);\r
454 \r
455                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
456 \r
457                         view.Delete (keys, oldValues);\r
458 \r
459                         Assert.IsNotNull (CustomEventParameterCollection, "KeysAndOldValues_OverwriteChanges");\r
460                         Assert.AreEqual ("String:@origin_ProductID=k_10", PassedParameters, "KeysAndOldValues_OverwriteChanges Values");\r
461                 }\r
462 \r
463                 [Test]\r
464                 public void ExecuteDelete_KeysAndOldValues_CompareAllValues () \r
465                 {\r
466                         SqlPoker sql = new SqlPoker ();\r
467                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
468                         sql.ProviderName = "System.Data.SqlClient";\r
469                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
470                         IDictionary keys;\r
471                         IDictionary values;\r
472                         IDictionary oldValues;\r
473                         InitializeView (view, out keys, out values, out oldValues);\r
474 \r
475                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
476 \r
477                         view.Delete (keys, oldValues);\r
478 \r
479                         Assert.IsNotNull (CustomEventParameterCollection, "KeysAndOldValues_CompareAllValues");\r
480                         Assert.AreEqual ("String:@origin_ProductID=ov_10, String:@origin_Description=ov_Beautifull, String:@origin_Name=ov_ColorTV", PassedParameters, "KeysAndOldValues_CompareAllValues Values");\r
481                 }\r
482 \r
483                 [Test]\r
484                 public void ExecuteDelete_KeysAndOldValues_CompareAllValues2 () \r
485                 {\r
486                         SqlPoker sql = new SqlPoker ();\r
487                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
488                         sql.ProviderName = "System.Data.SqlClient";\r
489                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
490                         IDictionary keys;\r
491                         IDictionary values;\r
492                         IDictionary oldValues;\r
493                         InitializeView (view, out keys, out values, out oldValues);\r
494                         view.DeleteParameters.Add ("origin_ProductID", "po_10");\r
495 \r
496                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
497 \r
498                         view.Delete (keys, oldValues);\r
499 \r
500                         Assert.IsNotNull (CustomEventParameterCollection, "ExecuteDelete_KeysAndOldValues_CompareAllValues2");\r
501                         string [] expectedParams = new string []\r
502                                                 { \r
503                                                         "String:@origin_ProductID=ov_10", \r
504                                                         "String:@origin_Description=ov_Beautifull",\r
505                                                         "String:@origin_Name=ov_ColorTV" \r
506                                                 };\r
507                         string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries);\r
508                         Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count");\r
509                         ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'");\r
510                 }\r
511 \r
512                 private static void ValidatePassedParams (string [] expectedParams, string [] actualValues, string errorMessageFormat) \r
513                 {\r
514                         foreach (string eps in expectedParams) {\r
515                                 bool found = false;\r
516                                 foreach (string aps in actualValues) {\r
517                                         if (eps == aps) {\r
518                                                 found = true;\r
519                                                 break;\r
520                                         }\r
521                                 }\r
522                                 Assert.IsTrue (found, String.Format (errorMessageFormat, eps));\r
523                         }\r
524                 }\r
525 \r
526                 private void InitializeView (CustomSqlDataSourceView view, out IDictionary keys, out IDictionary values, out IDictionary oldValues) \r
527                 {\r
528                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
529                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
530                         view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_10"));\r
531                         view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting);\r
532 \r
533                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
534                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
535                         view.DeleteParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_10"));\r
536                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
537 \r
538                         view.InsertCommandType = SqlDataSourceCommandType.Text;\r
539                         view.InsertCommand = "INSERT INTO products (ProductID, Name, Description) VALUES (@ProductID, @Name, @Description)";\r
540                         view.InsertParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_15"));\r
541                         view.InsertParameters.Add (new Parameter ("Name", TypeCode.String, "p_NewProduct"));\r
542                         view.InsertParameters.Add (new Parameter ("Description", TypeCode.String, "p_Description"));\r
543                         view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting);\r
544 \r
545                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
546                         view.UpdateCommand = "UPDATE products SET Name = @Name, Description = @Description WHERE ProductID = @ProductID";\r
547                         view.UpdateParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_15"));\r
548                         view.UpdateParameters.Add (new Parameter ("Name", TypeCode.String, "p_UpdatedProduct"));\r
549                         view.UpdateParameters.Add (new Parameter ("Description", TypeCode.String, "p_UpdatedDescription"));\r
550                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
551 \r
552                         view.OldValuesParameterFormatString = "origin_{0}";\r
553 \r
554                         keys = new Hashtable ();\r
555                         values = new Hashtable ();\r
556                         oldValues = new Hashtable ();\r
557 \r
558                         keys.Add ("ProductID", "k_10");\r
559 \r
560                         values.Add ("ProductID", "n_10");\r
561                         values.Add ("Name", "n_ColorTV");\r
562                         values.Add ("Description", "n_Beautifull");\r
563 \r
564                         oldValues.Add ("ProductID", "ov_10");\r
565                         oldValues.Add ("Name", "ov_ColorTV");\r
566                         oldValues.Add ("Description", "ov_Beautifull");                 \r
567                 }\r
568 \r
569                 [Test]\r
570                 public void ExecuteUpdateWithOldValues ()\r
571                 {\r
572                         SqlPoker sql = new SqlPoker ();\r
573                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
574                         sql.ProviderName = "System.Data.SqlClient";\r
575                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
576                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
577                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
578                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
579                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
580                         view.OldValuesParameterFormatString = "origin_{0}";\r
581                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
582                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
583                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
584                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
585                         Hashtable oldvalue = new Hashtable ();\r
586                         oldvalue.Add ("UserId", 2);\r
587                         view.Update (null, null, oldvalue);\r
588                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
589                         Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count");\r
590                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
591                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
592                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
593                         Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
594                         Assert.AreEqual ("@origin_UserId", CustomEventParameterCollection[2].ParameterName, "Parameter name#3");\r
595                         Assert.AreEqual (2, CustomEventParameterCollection[2].Value, "Parameter value#3");\r
596                 }\r
597 \r
598                 [Test]\r
599                 public void ExecuteUpdateWithOverwriteParameters ()\r
600                 {\r
601                         SqlPoker sql = new SqlPoker ();\r
602                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
603                         sql.ProviderName = "System.Data.SqlClient";\r
604                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
605                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
606                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
607                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
608                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
609                         view.OldValuesParameterFormatString = "origin_{0}";\r
610                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
611                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
612                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
613                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
614                         Hashtable value = new Hashtable ();\r
615                         value.Add ("UserId", 2);\r
616                         view.Update (value, null, null);\r
617                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
618                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
619                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
620                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
621                         Assert.AreEqual ("@origin_UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
622                         Assert.AreEqual (2, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
623                 }\r
624 \r
625                 [Test]\r
626                 public void ExecuteUpdateWithMargeParameters ()\r
627                 {\r
628                         SqlPoker sql = new SqlPoker ();\r
629                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
630                         sql.ProviderName = "System.Data.SqlClient";\r
631                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
632                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
633                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
634                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
635                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
636                         view.OldValuesParameterFormatString = "origin_{0}";\r
637                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
638                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
639                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
640                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
641                         Hashtable value = new Hashtable ();\r
642                         value.Add ("UserLName", "TestLName");\r
643                         view.Update (null, value, null);\r
644                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
645                         Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count");\r
646                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
647                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
648                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
649                         Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
650                         Assert.AreEqual ("@UserLName", CustomEventParameterCollection[2].ParameterName, "Parameter name#3");\r
651                         Assert.AreEqual ("TestLName", CustomEventParameterCollection[2].Value, "Parameter value#3");\r
652                 }\r
653 \r
654                 [Test]\r
655                 public void ExecuteUpdate_KeysValuesAndOldValues_OverwriteChanges () \r
656                 {\r
657                         SqlPoker sql = new SqlPoker ();\r
658                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
659                         sql.ProviderName = "System.Data.SqlClient";\r
660                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
661                         IDictionary keys;\r
662                         IDictionary values;\r
663                         IDictionary oldValues;\r
664                         InitializeView (view, out keys, out values, out oldValues);\r
665 \r
666                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
667 \r
668                         view.Update (keys, values, oldValues);\r
669 \r
670                         Assert.IsNotNull (CustomEventParameterCollection, "ExecuteUpdate_KeysValuesAndOldValues_OverwriteChanges");\r
671                         string [] expectedParams = new string []\r
672                                                 { \r
673                                                         "String:@ProductID=n_10", \r
674                                                         "String:@Name=n_ColorTV", \r
675                                                         "String:@Description=n_Beautifull",\r
676                                                         "String:@origin_ProductID=k_10" \r
677                                                 };\r
678                         string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries);\r
679                         Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count");\r
680                         ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'");\r
681                 }\r
682 \r
683                 [Test]\r
684                 public void ExecuteUpdate_KeysValuesAndOldValues_CompareAllValues () \r
685                 {\r
686                         SqlPoker sql = new SqlPoker ();\r
687                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
688                         sql.ProviderName = "System.Data.SqlClient";\r
689                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
690                         IDictionary keys;\r
691                         IDictionary values;\r
692                         IDictionary oldValues;\r
693                         InitializeView (view, out keys, out values, out oldValues);\r
694 \r
695                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
696 \r
697                         view.Update (keys, values, oldValues);\r
698 \r
699                         Assert.IsNotNull (CustomEventParameterCollection, "ExecuteUpdate_KeysValuesAndOldValues_CompareAllValues");\r
700                         string [] expectedParams = new string []\r
701                                                 { \r
702                                                         "String:@ProductID=n_10", \r
703                                                         "String:@Name=n_ColorTV", \r
704                                                         "String:@Description=n_Beautifull",\r
705                                                         "String:@origin_ProductID=ov_10", \r
706                                                         "String:@origin_Name=ov_ColorTV", \r
707                                                         "String:@origin_Description=ov_Beautifull",\r
708                                                 };\r
709                         string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries);\r
710                         Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count");\r
711                         ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'");\r
712                 }\r
713 \r
714                 void view_Updating (object sender, SqlDataSourceCommandEventArgs e)\r
715                 {\r
716                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
717                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
718                         e.Cancel = true;\r
719                 }\r
720 \r
721                 void view_Selecting (object sender, SqlDataSourceSelectingEventArgs e)\r
722                 {\r
723                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
724                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
725                         e.Cancel = true;\r
726                 }\r
727 \r
728                 void view_Inserting (object sender, SqlDataSourceCommandEventArgs e)\r
729                 {\r
730                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
731                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
732                         e.Cancel = true;\r
733                 }\r
734 \r
735                 void view_Deleting (object sender, SqlDataSourceCommandEventArgs e)\r
736                 {\r
737                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
738                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
739                         e.Cancel = true;\r
740                 }\r
741 \r
742                 private string FormatParameters (SqlParameterCollection sqlParameterCollection) \r
743                 {\r
744                         StringBuilder sb = new StringBuilder ();\r
745                         foreach (SqlParameter p in sqlParameterCollection) {\r
746                                 if (sb.Length > 0) {\r
747                                         sb.Append (", ");\r
748                                 }\r
749                                 sb.AppendFormat ("{0}:{1}={2}", p.DbType, p.ParameterName, p.Value);\r
750                         }\r
751                         return sb.ToString ();\r
752                 }\r
753 \r
754                 //exceptions \r
755                 [Test]\r
756                 [ExpectedException (typeof (NotSupportedException))]\r
757                 public void ExecuteUpdateException ()\r
758                 {\r
759                         SqlPoker sql = new SqlPoker ();\r
760                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
761                         sql.ProviderName = "System.Data.SqlClient";\r
762                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
763                         view.Update (null, null, null);\r
764                 }\r
765 \r
766                 [Test]\r
767                 [ExpectedException (typeof (NotSupportedException))]\r
768                 public void ExecuteDeleteException ()\r
769                 {\r
770                         SqlPoker sql = new SqlPoker ();\r
771                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
772                         sql.ProviderName = "System.Data.SqlClient";\r
773                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
774                         view.Delete (null, null);\r
775                 }\r
776 \r
777                 [Test]\r
778                 [ExpectedException (typeof (NotSupportedException))]\r
779                 public void ExecuteInsertException ()\r
780                 {\r
781                         SqlPoker sql = new SqlPoker ();\r
782                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
783                         sql.ProviderName = "System.Data.SqlClient";\r
784                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
785                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
786                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
787                         view.Insert (null);\r
788                 }\r
789 \r
790                 [Test]  //ConflictOptions.CompareAllValues must include old value collection\r
791                 [ExpectedException (typeof (InvalidOperationException))]\r
792                 public void ExecuteUpdateWithOldValuesException ()\r
793                 {\r
794                         SqlPoker sql = new SqlPoker ();\r
795                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
796                         sql.ProviderName = "System.Data.SqlClient";\r
797                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
798                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
799                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
800                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
801                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
802                         view.OldValuesParameterFormatString = "origin_{0}";\r
803                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
804                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
805                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
806                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
807                         view.Update (null, null, null);\r
808                 }\r
809 \r
810                 [Test] //ConflictOptions.CompareAllValues must include old value collection\r
811                 [ExpectedException (typeof (InvalidOperationException))]\r
812                 public void ExecuteDeleteWithOldValuesException ()\r
813                 {\r
814                         SqlPoker sql = new SqlPoker ();\r
815                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
816                         sql.ProviderName = "System.Data.SqlClient";\r
817                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
818                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
819                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
820                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
821                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
822                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
823                         view.OldValuesParameterFormatString = "origin_{0}";\r
824                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
825                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
826                         Hashtable oldvalue = new Hashtable ();\r
827                         oldvalue.Add ("ProductID", 10);\r
828                         view.Delete (null, null);\r
829                 }\r
830         }\r
831 }\r
832 \r
833 #endif\r