2 // SqliteTest.cs - Test for the Sqlite ADO.NET Provider in Mono.Data.Sqlite
\r
3 // This provider works on Linux and Windows and uses the native
\r
4 // sqlite.dll or sqlite.so library.
\r
6 // Modify or add to this test as needed...
\r
8 // SQL Lite can be downloaded from
\r
9 // http://www.hwaci.com/sw/sqlite/download.html
\r
11 // There are binaries for Windows and Linux.
\r
14 // mcs SqliteTest.cs -r System.Data.dll -r Mono.Data.Sqlite.dll
\r
17 // Daniel Morgan <danmorg@sc.rr.com>
\r
22 using Mono.Data.Sqlite;
\r
24 namespace Test.Mono.Data.Sqlite
\r
29 static void Main(string[] args)
\r
32 Console.WriteLine();
\r
33 Test(false, "ISO-8859-1");
\r
34 Console.WriteLine();
\r
38 static void Test(bool v3, string encoding) {
\r
40 Console.WriteLine("Testing Version 2" + (encoding != null ? " with " + encoding + " encoding" : ""));
\r
42 Console.WriteLine("Testing Version 3");
\r
44 System.IO.File.Delete("SqliteTest.db");
\r
46 SqliteConnection dbcon = new SqliteConnection();
\r
48 // the connection string is a URL that points
\r
49 // to a file. If the file does not exist, a
\r
52 // "URI=file:some/path"
\r
53 string connectionString =
\r
54 "URI=file:SqliteTest.db";
\r
56 connectionString += ",Version=3";
\r
57 if (encoding != null)
\r
58 connectionString += ",encoding=" + encoding;
\r
59 dbcon.ConnectionString = connectionString;
\r
63 SqliteCommand dbcmd = new SqliteCommand();
\r
64 dbcmd.Connection = dbcon;
\r
66 dbcmd.CommandText =
\r
67 "CREATE TABLE MONO_TEST ( " +
\r
70 "NTIME DATETIME); " +
\r
71 "INSERT INTO MONO_TEST " +
\r
72 "(NID, NDESC, NTIME) " +
\r
73 "VALUES(1,'One (unicode test: \u05D0)', '2006-01-01')";
\r
74 Console.WriteLine("Create & insert modified rows = 1: " + dbcmd.ExecuteNonQuery());
\r
77 "INSERT INTO MONO_TEST " +
\r
78 "(NID, NDESC, NTIME) " +
\r
79 "VALUES(:NID,:NDESC,:NTIME)";
\r
80 dbcmd.Parameters.Add( new SqliteParameter("NID", 2) );
\r
81 dbcmd.Parameters.Add( new SqliteParameter(":NDESC", "Two (unicode test: \u05D1)") );
\r
82 dbcmd.Parameters.Add( new SqliteParameter(":NTIME", DateTime.Now) );
\r
83 Console.WriteLine("Insert modified rows with parameters = 1, 2: " + dbcmd.ExecuteNonQuery() + " , " + dbcmd.LastInsertRowID());
\r
86 "INSERT INTO MONO_TEST " +
\r
87 "(NID, NDESC, NTIME) " +
\r
88 "VALUES(3,'Three, quoted parameter test, and next is null; :NTIME', NULL)";
\r
89 Console.WriteLine("Insert with null modified rows and ID = 1, 3: " + dbcmd.ExecuteNonQuery() + " , " + dbcmd.LastInsertRowID());
\r
92 "INSERT INTO MONO_TEST " +
\r
93 "(NID, NDESC, NTIME) " +
\r
94 "VALUES(4,'Four with ANSI char: ü', NULL)";
\r
95 Console.WriteLine("Insert with ANSI char ü = 1, 4: " + dbcmd.ExecuteNonQuery() + " , " + dbcmd.LastInsertRowID());
\r
98 "INSERT INTO MONO_TEST " +
\r
99 "(NID, NDESC, NTIME) " +
\r
101 dbcmd.Parameters.Clear();
\r
102 IDbDataParameter param1 = dbcmd.CreateParameter();
\r
103 param1.DbType = DbType.DateTime;
\r
105 dbcmd.Parameters.Add(param1);
\r
106 IDbDataParameter param2 = dbcmd.CreateParameter();
\r
107 param2.Value = "Using unnamed parameters";
\r
108 dbcmd.Parameters.Add(param2);
\r
109 IDbDataParameter param3 = dbcmd.CreateParameter();
\r
110 param3.DbType = DbType.DateTime;
\r
111 param3.Value = DateTime.Parse("2006-05-11 11:45:00");
\r
112 dbcmd.Parameters.Add(param3);
\r
113 Console.WriteLine("Insert with unnamed parameters = 1, 5: " + dbcmd.ExecuteNonQuery() + " , " + dbcmd.LastInsertRowID());
\r
115 dbcmd.CommandText =
\r
116 "SELECT * FROM MONO_TEST";
\r
117 SqliteDataReader reader;
\r
118 reader = dbcmd.ExecuteReader();
\r
120 Console.WriteLine("read and display data...");
\r
121 while(reader.Read())
\r
122 for (int i = 0; i < reader.FieldCount; i++)
\r
123 Console.WriteLine(" Col {0}: {1} (type: {2}, data type: {3})",
\r
124 i, reader[i] == null ? "(null)" : reader[i].ToString(), reader[i] == null ? "(null)" : reader[i].GetType().FullName, reader.GetDataTypeName(i));
\r
126 dbcmd.CommandText = "SELECT NDESC FROM MONO_TEST WHERE NID=2";
\r
127 Console.WriteLine("read and display a scalar = 'Two': " + dbcmd.ExecuteScalar());
\r
129 dbcmd.CommandText = "SELECT count(*) FROM MONO_TEST";
\r
130 Console.WriteLine("read and display a non-column scalar = 3: " + dbcmd.ExecuteScalar());
\r
132 Console.WriteLine("read and display data using DataAdapter/DataSet...");
\r
133 SqliteDataAdapter adapter = new SqliteDataAdapter("SELECT * FROM MONO_TEST", connectionString);
\r
134 DataSet dataset = new DataSet();
\r
135 adapter.Fill(dataset);
\r
136 foreach(DataTable myTable in dataset.Tables){
\r
137 foreach(DataRow myRow in myTable.Rows){
\r
138 foreach (DataColumn myColumn in myTable.Columns){
\r
139 Console.WriteLine(" " + myRow[myColumn]);
\r
144 /*Console.WriteLine("read and display data using DataAdapter/DataTable...");
\r
145 DataTable dt = new DataTable();
\r
147 DataView dv = new DataView(dt);
\r
148 foreach (DataRowView myRow in dv) {
\r
149 foreach (DataColumn myColumn in myRow.Row.Table.Columns) {
\r
150 Console.WriteLine(" " + myRow[myColumn.ColumnName]);
\r
155 dbcmd.CommandText = "SELECT NDESC INVALID SYNTAX FROM MONO_TEST WHERE NID=2";
\r
156 dbcmd.ExecuteNonQuery();
\r
157 Console.WriteLine("Should not reach here.");
\r
158 } catch (Exception e) {
\r
159 Console.WriteLine("Testing a syntax error: " + e.GetType().Name + ": " + e.Message);
\r
163 dbcmd.CommandText = "SELECT 0/0 FROM MONO_TEST WHERE NID=2";
\r
164 Console.WriteLine("Should not reach here: " + dbcmd.ExecuteScalar());
\r
165 } catch (Exception e) {
\r
166 Console.WriteLine("Testing an execution error: " + e.GetType().Name + ": " + e.Message);
\r