如何使用ODBC绑定Dart [英] how to use ODBC binding for Dart

查看:204
本文介绍了如何使用ODBC绑定Dart的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的应用程式中使用DART的ODBC绑定这一个, m使用ORACLE XE数据库,但没有得到如何设置它,虽然我读的基本示例在读我:(



附加我的ORACLE的打印屏幕欣赏以下内容:
1.锄要在DART中设置我的ODBC,$。

。 b $ b 2.如何获得相同的SQL语句执行。



我写了以下内容:

  void main(){
//分配一个环境句柄
var hEnv = new SqlHandle ;
sqlAllocHandle(SQL_HANDLE_ENV,null,hEnv);
//设置要使用的ODBC版本
var version = new SqlPointer().. value = SQL_OV_ODBC3;
sqlSetEnvAttr hEnv,SQL_ATTR_ODBC_VERSION,version,0);
//分配连接句柄
var hConn = new SqlHandle();

sqlAllocHandle(SQL_HANDLE_DBC,hEnv,hConn);

//连接。
sqlConnect(hConn,XE,SQL_NTS,SYSTEM,SQL_NTS,myPasswords,SQL_NTS); //所以,我需要改变这个数据!

//分配语句句柄。
var hStmt = new SqlHandle();

sqlAllocHandle(SQL_HANDLE_STMT,hConn,hStmt);

//准备语句。
sqlPrepare(hStmt,select * from Vendors,SQL_NTS); //我需要打印这个SQL的输出!

//执行和获取一些数据。
sqlExecute(hStmt);

sqlFetch(hStmt);


//自由语句句柄。
sqlFreeHandle(SQL_HANDLE_STMT,hStmt);

//断开连接。
sqlDisconnect(hConn);

//自由连接句柄。
sqlFreeHandle(SQL_HANDLE_DBC,hConn);

//自由环境句柄。
sqlFreeHandle(SQL_HANDLE_ENV,hEnv);

}

感谢


$ b b

>

解决方案

感谢pub作者Juan。
我的错误是,我使用Windows x64,并使用std ODBC定义了我的ODBC,没有注意到,这个pub是32位,我必须定义ODBC使用:


(YOUR WINDOW DIRECTORY)\SysWOW64\odbcad32.exe


>



以下代码工作完美

  import'package:odbc / odbc。镖'; 

void main(){
var hEnv = new SqlHandle();
sqlAllocHandle(SQL_HANDLE_ENV,null,hEnv);

var version = new SqlPointer().. value = SQL_OV_ODBC3;
sqlSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,version,0);

var hConn = new SqlHandle();
sqlAllocHandle(SQL_HANDLE_DBC,hEnv,hConn);

sqlConnect(hConn,< DSN>,SQL_NTS,< USER>,SQL_NTS,< PASS>,SQL_NTS);

var hStmt = new SqlHandle();

sqlAllocHandle(SQL_HANDLE_STMT,hConn,hStmt);

sqlPrepare(hStmt,SELECT * FROM vendors,SQL_NTS);

var col1 = new SqlLongBuffer();
var flags1 = new SqlIntBuffer();
sqlBindCol(hStmt,1,col1.ctype(),col1.address(),0,flags1.address());

var col2 = new SqlLongBuffer();
var flags2 = new SqlIntBuffer();
sqlBindCol(hStmt,2,col2.ctype(),col2.address(),0,flags2.address());

var col3 = new SqlStringBuffer(255);
var flags3 = new SqlIntBuffer();
sqlBindCol(hStmt,3,col3.ctype(),col3.address(),col3.length(),flags3.address());

var col4 = new SqlStringBuffer(255);
var flags4 = new SqlIntBuffer();
sqlBindCol(hStmt,4,col4.ctype(),col4.address(),col4.length(),flags4.address());

sqlExecute(hStmt);

while(sqlFetch(hStmt)!= SQL_NO_DATA_FOUND){
print($ {col1.peek()} $ {col2.peek()} $ {col3.peek $ {col4.peek()});
}

sqlFreeHandle(SQL_HANDLE_STMT,hStmt);

sqlDisconnect(hConn);

sqlFreeHandle(SQL_HANDLE_DBC,hConn);

sqlFreeHandle(SQL_HANDLE_ENV,hEnv);
}

创建表:



< pre class =lang-dart prettyprint-override> CREATE TABLE vendor(
vendor_id NUMBER,
vCode NUMBER,
vName VARCHAR(255),
vEmail VARCHAR(255),
PRIMARY KEY(vendor_id));

输入资料:

  INSERT INTO vendor VALUES(1,111,'One','one@vendors.com')
INSERT INTO vendor VALUES(2,222,'Two' ,'two@vendors.com');
INSERT INTO vendors VALUES(3,33,'Three','three@vendors.com');

控制台输出:

 观察站在http://127.0.0.1:49433 
1 111 one one@vendors.com
2 222两个two@vendors.com
3 33三three@vendors.com


I wanted to use the ODBC binding for DART this one in my app, I'm using ORACLE XE database, but did not get how to set it up, though I read the basic example in the read me :(

Attached a print screen of my ORACLE XE ODB setup, suceed connection, and simple SQL statement,

Appreciate to know the following: 1. Hoe to set-up my ODBC in DART, 2. How to get the same SQL statement executed.

I wrote the below:

void main() {
  // Allocate an environment handle.
 var hEnv = new SqlHandle();   
 sqlAllocHandle(SQL_HANDLE_ENV, null, hEnv);    
 // Set ODBC version to be used.
 var version = new SqlPointer()..value = SQL_OV_ODBC3;    
 sqlSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, version, 0);    
 // Allocate a connection handle.
 var hConn = new SqlHandle();

sqlAllocHandle(SQL_HANDLE_DBC, hEnv, hConn);

// Connect.
sqlConnect(hConn, "XE", SQL_NTS, "SYSTEM", SQL_NTS, "myPasswords", SQL_NTS);  // so, I need to change this data only!

// Allocate a statement handle.
var hStmt = new SqlHandle();

sqlAllocHandle(SQL_HANDLE_STMT, hConn, hStmt);

// Prepare a statement.
sqlPrepare(hStmt, "select * from Vendors", SQL_NTS);   // I need to print the output of this SQL!!

// Execute and fetch some data.
sqlExecute(hStmt);

sqlFetch(hStmt);


// Free statement handle.
sqlFreeHandle(SQL_HANDLE_STMT, hStmt);

// Disconnect.
sqlDisconnect(hConn);

// Free connection handle.
sqlFreeHandle(SQL_HANDLE_DBC, hConn);

// Free environment handle.
sqlFreeHandle(SQL_HANDLE_ENV, hEnv); 

}

thanks

解决方案

Thanks for Juan, the pub author. my mistake was, I'm using Windows x64, and defined my ODBC using std ODBC, did not notice, that this pub is for 32 bit, and I've to define the ODBC using:

(YOUR WINDOW DIRECTORY)\SysWOW64\odbcad32.exe

the below code worked perfectly

import 'package:odbc/odbc.dart';

void main() {
     var hEnv = new SqlHandle();
     sqlAllocHandle(SQL_HANDLE_ENV, null, hEnv);

     var version = new SqlPointer()..value = SQL_OV_ODBC3;
    sqlSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, version, 0);

    var hConn = new SqlHandle();
    sqlAllocHandle(SQL_HANDLE_DBC, hEnv, hConn);

    sqlConnect(hConn, "<DSN>", SQL_NTS, "<USER>", SQL_NTS, "<PASS>", SQL_NTS);

    var hStmt = new SqlHandle();

    sqlAllocHandle(SQL_HANDLE_STMT, hConn, hStmt);

    sqlPrepare(hStmt, "SELECT * FROM vendors", SQL_NTS);

    var col1 = new SqlLongBuffer();
    var flags1 = new SqlIntBuffer();
    sqlBindCol(hStmt, 1, col1.ctype(), col1.address(), 0, flags1.address());

    var col2 = new SqlLongBuffer();
    var flags2 = new SqlIntBuffer();
    sqlBindCol(hStmt, 2, col2.ctype(), col2.address(), 0, flags2.address());

    var col3 = new SqlStringBuffer(255);
    var flags3 = new SqlIntBuffer();
    sqlBindCol(hStmt, 3, col3.ctype(), col3.address(), col3.length(), flags3.address());

    var col4 = new SqlStringBuffer(255);
    var flags4 = new SqlIntBuffer();
    sqlBindCol(hStmt, 4, col4.ctype(), col4.address(), col4.length(), flags4.address());

    sqlExecute(hStmt);

    while (sqlFetch(hStmt) != SQL_NO_DATA_FOUND) {
          print("${col1.peek()} ${col2.peek()} ${col3.peek()} ${col4.peek()} ");
     }

   sqlFreeHandle(SQL_HANDLE_STMT, hStmt);

   sqlDisconnect(hConn);

   sqlFreeHandle(SQL_HANDLE_DBC, hConn);

   sqlFreeHandle(SQL_HANDLE_ENV, hEnv);
}

Table created:

      CREATE TABLE vendors (
             vendor_id NUMBER,
             vCode NUMBER,
             vName VARCHAR(255),
             vEmail VARCHAR(255),
             PRIMARY KEY (vendor_id));

Input data:

 INSERT INTO vendors VALUES(1, 111, 'One', 'one@vendors.com')
 INSERT INTO vendors VALUES(2, 222, 'Two', 'two@vendors.com');
 INSERT INTO vendors VALUES(3, 33, 'Three', 'three@vendors.com');

Console output:

     Observatory listening on http://127.0.0.1:49433
 1 111 One one@vendors.com 
 2 222 Two two@vendors.com 
 3 33 Three three@vendors.com 

这篇关于如何使用ODBC绑定Dart的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆