import std.stdio;
import std.string;
import sdbo.odbc;
int main(char[][] args)
{
char[] dsn;
char[] sql;
if(args.length < 3) {
writefln("Usage: test1 validDSN \"Select something from somewhere\"");
return 1;
}
dsn = args[1];
sql = args[2];
SqlResult result = (new OdbcEnvironment()).connect(dsn).execDirect(sql);
if(!result.columnCount()) {
throw new Exception("Not a row source");
}
foreach(char[] column; result.columns())
writefln("column %s is of type %s and size %d",
result.columnSpec(column).name, result.columnSpec(column).type, result.columnSpec(column).csize);
writefln("\nBinding all columns to char strings");
result.setBinding(result.D_CHAR);
writefln("\nFetching first row");
if(result.fetch()) {
foreach(char[] column; result.columns()) {
printf("result.string(%s) = %s\n", toStringz(column), result.stringz(column));
}
} else {
writefln("Row source is empty.");
}
version(Windows) {
writefln("\nBinding all columns to wchar strings");
result.setBinding(result.D_WCHAR);
}
writefln("\nFetching second row");
if(result.fetch()) {
foreach(char[] column; result.columns()) {
version(Windows)
writefln("result.wstring(%s) = %s\n", column, result.wstring(column));
version(linux)
printf("result.string(%s) = %s\n", toStringz(column), result.stringz(column));
}
} else {
writefln("No more rows available.");
}
writefln("Any message?");
if(result.lastMessage.recCount)
writefln(result.lastMessage.toString());
else
writefln("no message");
result.connection().environment().free();
return 0;
}
private import std.string;
private import std.stdio;
import sdbo.odbc;
int main(char[][] args)
{
odbcTest();
return 0;
}
void odbcTest()
{
writefln("Creating environment...");
OdbcEnvironment env = new OdbcEnvironment;
version(Windows) {
writefln("Connecting to database test1.mdb...");
OdbcConnection c = env.connectDriver("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=test1.mdb");
} else {
writefln("Connecting to MySQL Server...");
version(named_driver) {
OdbcConnection c =
env.connectDriver("DRIVER={MySQL};HOST=localhost;USER=root;PASSWORD=;");
} else {
OdbcConnection c =
env.connectDriver("DRIVER=/usr/lib/libmyodbc3.so;HOST=localhost;USER=root;PASSWORD=;");
}
}
writefln("Connected! Connection string returned by driver: " ~ c.connectionString());
SqlResult result;
version(linux) {
c.execDirect("create database if not exists _sdbo_teste");
c.execDirect("use _sdbo_teste;");
}
try {
writefln("Creating table TestCount with wrong syntax...");
result = c.execDirect("create table TestCount ( counter int, label varRchar(50) )");
} catch(SqlException e) {
writefln("SQL Exception caught! Odbc diagnostics:");
writefln(e.toString());
writefln();
char[] createtable = "create table TestCount ( counter_id int, counter_label varchar(50) )";
try {
writefln("Creating table TestCount with correct syntax...");
result = c.execDirect(createtable);
} catch(SqlException e) {
writefln("2nd SQL Exception caught! Odbc diagnostics:");
writefln(e.toString());
writefln();
if(e.sqlState == "42S01") {
writefln("Table already exists. Dropping and recreating...");
result = c.execDirect("drop table TestCount");
result.execDirect(createtable);
} else {
writefln("Can't recover. Giving up...");
version(Windows)
writefln("Create a database test1.mdb in this directory if it doesn't exist.");
delete env;
return;
}
}
}
writefln("Inserting 10 values into TestCount...");
for(int i=0; i<10; i++)
result.execDirect(
"insert into TestCount values (" ~ toString(i) ~ ", 'counter id is " ~ toString(i) ~ "')"
);
writefln("Updating 2 rows");
result.execDirect("update TestCount set counter_label = '1st updated row' where counter_id = 3");
result.execDirect("update TestCount set counter_label = '2nd updated row' where counter_id = 7");
writefln("Deleting 2 rows");
c.execDirect("delete from TestCount where counter_id = 1").free();
c.execDirect("delete from TestCount where counter_id = 5").free();
writefln("Selecting on the table");
result.execDirect("select * from TestCount order by counter_id");
writefln("Got result. Columns:");
foreach(char[] column; result.columns()) {
writef("Column %s: ", column);
ColumnSpec* cs = result.columnSpec(column);
writefln("%s, size %d, digits %d, nullable %d, numeric type %d",
cs.type, cs.csize, cs.digits, cs.nullable, cs.numericType);
}
writefln("Setting bindings to string conversion for all columns");
result.setBinding(result.D_CHAR);
writefln("Fetching first row");
result.fetch();
printf("%s; ", result.stringz("counter_id"));
printf("%s; ", result.stringz(1));
writefln();
writefln("Loop fetching all remaining rows");
char* test = result.stringz(1);
printf("TEST: %s\n", test);
while(result.fetch) {
for(int col = 0; col < result.columnCount; col++) {
if(result.isNull(col))
writef("NULL; ");
else
printf("%s; ", result.stringz(col));
}
writefln();
}
printf("TEST: %s\n", test);
writefln("Add a date type column...");
result.execDirect("alter table TestCount add counter_date date");
writefln("... set it to now using native sql string");
version(Windows)
result.execDirect("update TestCount set counter_date = date()");
else
result.execDirect("update TestCount set counter_date = now()");
writefln("... and query again");
result.execDirect("select * from TestCount order by counter_id");
result.fetch();
writefln("\nid: %d; ", result.vint("counter_id"));
writefln("label: %s; ", result.string("counter_label"));
writefln("date: %s; ", result.string("counter_date"));
writefln("Binding id as string");
result.setBinding("counter_id", result.D_CHAR);
result.fetch();
writefln("\nid: %d; ", result.string(0));
writefln("label: %s; ", result.string(1));
writefln("date: %s; ", result. string(2));
writefln("Any message?");
if(result.lastMessage.recCount)
writefln(result.lastMessage.toString());
else
writefln("no message");
writefln("Cleanup");
delete env;
}
private import std.string;
private import std.stdio;
import sdbo.odbc;
void main()
{
version(Windows) {
char[] constr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=test1.mdb";
}
else {
char[] constr = "DRIVER=/usr/lib/libmyodbc3.so;HOST=localhost;USER=root";
}
OdbcEnvironment env = new OdbcEnvironment;
OdbcConnection c = env.connectDriver(constr);
createTestTable(c, "create table TestCount (
counter_id int,
counter_label varchar(50),
counter_date date )"
);
SqlResult result = c.newResult();
result.prepare("insert into TestCount values(?, ?, ?)");
for(int i=1; i < 10; i++) {
result.setInput(0, 10 * i);
result.setInput(1, "ID set to " ~ toString(10 * i));
result.setInput(2, "20" ~ toString(10 * i) ~ "-10-20");
result.execute();
}
result.setInput(0, 990);
result.setInput(1, "something different");
result.setInput(2, "1999-3-4");
result.execute();
result.setInput(0, 991);
result.setInput(1, "more than 50 characters
more than 50 characters
more than 50 characters
more than 50 characters");
result.setInput(2, "1999-3-4");
result.execute();
result.execDirect("select * from TestCount order by counter_id");
result.setBinding(result.D_CHAR);
while(result.fetch) {
writef("Fetch: ");
foreach(char[] column; result.columns())
printf("%s = %s; ", toStringz(column), result.stringz(column));
writefln();
}
delete env;
}
void createTestTable(DBCon c, char[]createtable)
{
SqlResult result = c.newResult();
version(linux) {
result.execDirect("create database if not exists _sdbo_teste");
result.execDirect("use _sdbo_teste;");
}
try {
result = c.execDirect(createtable);
} catch(SqlException e) {
if(e.sqlState == "42S01") {
result = c.execDirect("drop table TestCount");
result.execDirect(createtable);
} else {
writefln("Can't recover. Giving up...");
writefln("Create a database test1.mdb in this directory if it doesn't exist.");
c.environment.free();
throw e;
}
}
delete result;
}
private import std.string;
private import std.stdio;
import sdbo.odbc;
void main()
{
OdbcEnvironment env = new OdbcEnvironment;
writefln("List of available Driver:");
foreach(char[][2] driver; env.drivers())
writefln("%s - %s", driver[0], driver[1]);
writefln();
version(Windows) {
char[] constr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=test1.mdb";
}
else {
char[] constr = "DRIVER=/usr/lib/libmyodbc3.so;HOST=localhost;USER=root";
}
OdbcConnection c = env.connectDriver(constr);
SqlResult result;
char[] createtable = "create table TestCount ( counter_id int, counter_label varchar(50), counter_date date )";
version(linux) {
c.execDirect("create database if not exists _sdbo_teste");
c.execDirect("use _sdbo_teste;");
}
try {
result = c.execDirect(createtable);
} catch(SqlException e) {
if(e.sqlState == "42S01") {
result = c.execDirect("drop table TestCount");
result.execDirect(createtable);
} else {
writefln(e.toString());
writefln("Can't recover. Giving up...");
delete env;
return;
}
}
version(Windows) {
result.execDirect("insert into TestCount values (10, 'counter id is 10', date())");
} else {
result.execDirect("insert into TestCount values (10, 'counter id is 10', now())");
}
result.execDirect("select * from TestCount order by counter_id");
result.bindAll = false;
result.setBinding(2, result.D_CHAR);
result.fetch();
writefln("display a bound column");
writefln("string counter_date: %s", result.string(2));
writefln("retrieving unbound columns with longData and stringData");
writefln("long counter_id: %d", result.longData(0));
writefln("string counter_label: %s", result.stringData("counter_label"));
try {
writefln("long counter_id: %d", result.longData(0));
} catch(SqlException e) {
e.print();
}
delete env;
}
Generated on Tue Sep 21 00:33:13 2004 for Simple Database Objects by
1.3.8