SqliteCommand reorganization and other changes.
[mono.git] / mcs / class / Mono.Data.SqliteClient / Test / SqliteTest.cs
1 //\r
2 // SqliteTest.cs - Test for the Sqlite ADO.NET Provider in Mono.Data.SqliteClient\r
3 //                 This provider works on Linux and Windows and uses the native\r
4 //                 sqlite.dll or sqlite.so library.\r
5 //\r
6 // Modify or add to this test as needed...\r
7 //\r
8 // SQL Lite can be downloaded from\r
9 // http://www.hwaci.com/sw/sqlite/download.html\r
10 //\r
11 // There are binaries for Windows and Linux.\r
12 //\r
13 // To compile:\r
14 //  mcs SqliteTest.cs -r System.Data.dll -r Mono.Data.SqliteClient.dll\r
15 //\r
16 // Author:\r
17 //     Daniel Morgan <danmorg@sc.rr.com>\r
18 //\r
19 \r
20 using System;\r
21 using System.Data;\r
22 using Mono.Data.SqliteClient;\r
23 \r
24 namespace Test.Mono.Data.SqliteClient\r
25 {\r
26         class SqliteTest\r
27         {\r
28                 [STAThread]\r
29                 static void Main(string[] args)\r
30                 {\r
31                         Test(false);\r
32                         Console.WriteLine();\r
33                         Test(true);\r
34                 }\r
35                 \r
36                 static void Test(bool v3) {\r
37                         if (!v3)\r
38                                 Console.WriteLine("Testing Version 2");\r
39                         else\r
40                                 Console.WriteLine("Testing Version 3");\r
41                                 \r
42                         System.IO.File.Delete("SqliteTest.db");\r
43                 \r
44                         SqliteConnection dbcon = new SqliteConnection();\r
45                         \r
46                         // the connection string is a URL that points\r
47                         // to a file.  If the file does not exist, a \r
48                         // file is created.\r
49 \r
50                         // "URI=file:some/path"\r
51                         string connectionString =\r
52                                 "URI=file:SqliteTest.db";\r
53                         if (v3)\r
54                                 connectionString += ",Version=3";\r
55                         dbcon.ConnectionString = connectionString;\r
56                                 \r
57                         dbcon.Open();\r
58 \r
59                         SqliteCommand dbcmd = new SqliteCommand();\r
60                         dbcmd.Connection = dbcon;\r
61                         \r
62                         dbcmd.CommandText = \r
63                                 "CREATE TABLE MONO_TEST ( " +\r
64                                 "NID INT, " +\r
65                                 "NDESC TEXT, " +\r
66                                 "NTIME DATETIME); " +\r
67                                 "INSERT INTO MONO_TEST  " +\r
68                                 "(NID, NDESC, NTIME )"+\r
69                                 "VALUES(1,'One', '2006-01-01')";\r
70                         Console.WriteLine("Create & insert modified rows = 1: " + dbcmd.ExecuteNonQuery());\r
71 \r
72                         dbcmd.CommandText =\r
73                                 "INSERT INTO MONO_TEST  " +\r
74                                 "(NID, NDESC, NTIME )"+\r
75                                 "VALUES(2,'Two', '2006-01-02')";\r
76                         Console.WriteLine("Insert modified rows and ID = 1, 2: " + dbcmd.ExecuteNonQuery() + " , " + dbcmd.LastInsertRowID());\r
77 \r
78                         dbcmd.CommandText =\r
79                                 "SELECT * FROM MONO_TEST";\r
80                         SqliteDataReader reader;\r
81                         reader = dbcmd.ExecuteReader();\r
82 \r
83                         Console.WriteLine("read and display data...");\r
84                         while(reader.Read())\r
85                                 for (int i = 0; i < reader.FieldCount; i++)\r
86                                         Console.WriteLine(" Col {0}: {1} (type: {2}, data type: {3})",\r
87                                                 i, reader[i].ToString(), reader[i].GetType().FullName, reader.GetDataTypeName(i));\r
88 \r
89                         dbcmd.CommandText = "SELECT NDESC FROM MONO_TEST WHERE NID=2";\r
90                         Console.WriteLine("read and display a scalar = 'Two': " + dbcmd.ExecuteScalar());\r
91 \r
92                         dbcmd.CommandText = "SELECT count(*) FROM MONO_TEST";\r
93                         Console.WriteLine("read and display a non-column scalar = 2: " + dbcmd.ExecuteScalar());\r
94 \r
95                         Console.WriteLine("read and display data using DataAdapter...");\r
96                         SqliteDataAdapter adapter = new SqliteDataAdapter("SELECT * FROM MONO_TEST", connectionString);\r
97                         DataSet dataset = new DataSet();\r
98                         adapter.Fill(dataset);\r
99                         foreach(DataTable myTable in dataset.Tables){\r
100                                 foreach(DataRow myRow in myTable.Rows){\r
101                                         foreach (DataColumn myColumn in myTable.Columns){\r
102                                                 Console.WriteLine(" " + myRow[myColumn]);\r
103                                         }\r
104                                 }\r
105                         }\r
106 \r
107                         try {\r
108                                 dbcmd.CommandText = "SELECT NDESC INVALID SYNTAX FROM MONO_TEST WHERE NID=2";\r
109                                 dbcmd.ExecuteNonQuery();\r
110                                 Console.WriteLine("Should not reach here.");\r
111                         } catch (Exception e) {\r
112                                 Console.WriteLine("Testing a syntax error: " + e.GetType().Name + ": " + e.Message);\r
113                         }\r
114 \r
115                         /*try {\r
116                                 dbcmd.CommandText = "SELECT 0/0 FROM MONO_TEST WHERE NID=2";\r
117                                 Console.WriteLine("Should not reach here: " + dbcmd.ExecuteScalar());\r
118                         } catch (Exception e) {\r
119                                 Console.WriteLine("Testing an execution error: " + e.GetType().Name + ": " + e.Message);\r
120                         }*/\r
121 \r
122                         dataset.Dispose();\r
123                         adapter.Dispose();\r
124                         reader.Close();\r
125                         dbcmd.Dispose();\r
126                         dbcon.Close();\r
127                 }\r
128         }\r
129 }\r