Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
1a730894
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
1a730894
编写于
11月 16, 2021
作者:
X
xiaolei li
提交者:
GitHub
11月 16, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TD-10524]<feature>:C# support schemaless insert (#8476)
上级
594f9819
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
510 addition
and
3 deletion
+510
-3
src/connector/C#/TDengineDriver.cs
src/connector/C#/TDengineDriver.cs
+5
-1
tests/examples/C#/C#checker/TDengineDriver.cs
tests/examples/C#/C#checker/TDengineDriver.cs
+5
-1
tests/examples/C#/TDengineDriver.cs
tests/examples/C#/TDengineDriver.cs
+5
-1
tests/examples/C#/schemaless/TDengineDriver.cs
tests/examples/C#/schemaless/TDengineDriver.cs
+193
-0
tests/examples/C#/schemaless/schemalessSample.cs
tests/examples/C#/schemaless/schemalessSample.cs
+302
-0
未找到文件。
src/connector/C#/TDengineDriver.cs
浏览文件 @
1a730894
...
...
@@ -163,8 +163,12 @@ namespace TDengineDriver
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_close"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
Close
(
IntPtr
taos
);
//get precisionin parameter r
estultset
//get precision in
restultset
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_result_precision"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
ResultPrecision
(
IntPtr
taos
);
//schemaless API
[
DllImport
(
"taos"
,
SetLastError
=
true
,
EntryPoint
=
"taos_schemaless_insert"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
SchemalessInsert
(
IntPtr
taos
,
string
[]
lines
,
int
numLines
,
int
protocol
,
int
precision
);
}
}
tests/examples/C#/C#checker/TDengineDriver.cs
浏览文件 @
1a730894
...
...
@@ -164,8 +164,12 @@ namespace TDengineDriver
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_close"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
Close
(
IntPtr
taos
);
//get precisionin parameter r
estultset
//get precision in
restultset
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_result_precision"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
ResultPrecision
(
IntPtr
taos
);
//schemaless API
[
DllImport
(
"taos"
,
SetLastError
=
true
,
EntryPoint
=
"taos_schemaless_insert"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
SchemalessInsert
(
IntPtr
taos
,
string
[]
lines
,
int
numLines
,
int
protocol
,
int
precision
);
}
}
tests/examples/C#/TDengineDriver.cs
浏览文件 @
1a730894
...
...
@@ -164,8 +164,12 @@ namespace TDengineDriver
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_close"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
Close
(
IntPtr
taos
);
//get precision
in parameter r
estultset
//get precision
in
restultset
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_result_precision"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
ResultPrecision
(
IntPtr
taos
);
//schemaless API
[
DllImport
(
"taos"
,
SetLastError
=
true
,
EntryPoint
=
"taos_schemaless_insert"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
SchemalessInsert
(
IntPtr
taos
,
string
[]
lines
,
int
numLines
,
int
protocol
,
int
precision
);
}
}
tests/examples/C#/schemaless/TDengineDriver.cs
0 → 100644
浏览文件 @
1a730894
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using
System
;
using
System.Collections.Generic
;
using
System.Runtime.InteropServices
;
namespace
TDengineDriver
{
enum
TDengineDataType
{
TSDB_DATA_TYPE_NULL
=
0
,
// 1 bytes
TSDB_DATA_TYPE_BOOL
=
1
,
// 1 bytes
TSDB_DATA_TYPE_TINYINT
=
2
,
// 1 bytes
TSDB_DATA_TYPE_SMALLINT
=
3
,
// 2 bytes
TSDB_DATA_TYPE_INT
=
4
,
// 4 bytes
TSDB_DATA_TYPE_BIGINT
=
5
,
// 8 bytes
TSDB_DATA_TYPE_FLOAT
=
6
,
// 4 bytes
TSDB_DATA_TYPE_DOUBLE
=
7
,
// 8 bytes
TSDB_DATA_TYPE_BINARY
=
8
,
// string
TSDB_DATA_TYPE_TIMESTAMP
=
9
,
// 8 bytes
TSDB_DATA_TYPE_NCHAR
=
10
,
// unicode string
TSDB_DATA_TYPE_UTINYINT
=
11
,
// 1 byte
TSDB_DATA_TYPE_USMALLINT
=
12
,
// 2 bytes
TSDB_DATA_TYPE_UINT
=
13
,
// 4 bytes
TSDB_DATA_TYPE_UBIGINT
=
14
// 8 bytes
}
enum
TDengineInitOption
{
TSDB_OPTION_LOCALE
=
0
,
TSDB_OPTION_CHARSET
=
1
,
TSDB_OPTION_TIMEZONE
=
2
,
TDDB_OPTION_CONFIGDIR
=
3
,
TDDB_OPTION_SHELL_ACTIVITY_TIMER
=
4
}
enum
TDengineSchemalessProtocol
{
TSDB_SML_UNKNOWN_PROTOCOL
=
0
,
TSDB_SML_LINE_PROTOCOL
=
1
,
TSDB_SML_TELNET_PROTOCOL
=
2
,
TSDB_SML_JSON_PROTOCOL
=
3
}
enum
TDengineSchemalessPrecision
{
TSDB_SML_TIMESTAMP_NOT_CONFIGURED
=
0
,
TSDB_SML_TIMESTAMP_HOURS
=
1
,
TSDB_SML_TIMESTAMP_MINUTES
=
2
,
TSDB_SML_TIMESTAMP_SECONDS
=
3
,
TSDB_SML_TIMESTAMP_MILLI_SECONDS
=
4
,
TSDB_SML_TIMESTAMP_MICRO_SECONDS
=
5
,
TSDB_SML_TIMESTAMP_NANO_SECONDS
=
6
}
class
TDengineMeta
{
public
string
name
;
public
short
size
;
public
byte
type
;
public
string
TypeName
()
{
switch
((
TDengineDataType
)
type
)
{
case
TDengineDataType
.
TSDB_DATA_TYPE_BOOL
:
return
"BOOL"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TINYINT
:
return
"TINYINT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_SMALLINT
:
return
"SMALLINT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_INT
:
return
"INT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BIGINT
:
return
"BIGINT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UTINYINT
:
return
"TINYINT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_USMALLINT
:
return
"SMALLINT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UINT
:
return
"INT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UBIGINT
:
return
"BIGINT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_FLOAT
:
return
"FLOAT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_DOUBLE
:
return
"DOUBLE"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BINARY
:
return
"STRING"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
"TIMESTAMP"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_NCHAR
:
return
"NCHAR"
;
default
:
return
"undefine"
;
}
}
}
class
TDengine
{
public
const
int
TSDB_CODE_SUCCESS
=
0
;
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_init"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
void
Init
();
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_cleanup"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
void
Cleanup
();
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_options"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
void
Options
(
int
option
,
string
value
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_connect"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
Connect
(
string
ip
,
string
user
,
string
password
,
string
db
,
short
port
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_errstr"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
private
IntPtr
taos_errstr
(
IntPtr
res
);
static
public
string
Error
(
IntPtr
res
)
{
IntPtr
errPtr
=
taos_errstr
(
res
);
return
Marshal
.
PtrToStringAnsi
(
errPtr
);
}
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_errno"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
ErrorNo
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_query"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
Query
(
IntPtr
conn
,
string
sqlstr
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_affected_rows"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
AffectRows
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_field_count"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
FieldCount
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_fetch_fields"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
private
IntPtr
taos_fetch_fields
(
IntPtr
res
);
static
public
List
<
TDengineMeta
>
FetchFields
(
IntPtr
res
)
{
const
int
fieldSize
=
68
;
List
<
TDengineMeta
>
metas
=
new
List
<
TDengineMeta
>();
if
(
res
==
IntPtr
.
Zero
)
{
return
metas
;
}
int
fieldCount
=
FieldCount
(
res
);
IntPtr
fieldsPtr
=
taos_fetch_fields
(
res
);
for
(
int
i
=
0
;
i
<
fieldCount
;
++
i
)
{
int
offset
=
i
*
fieldSize
;
TDengineMeta
meta
=
new
TDengineMeta
();
meta
.
name
=
Marshal
.
PtrToStringAnsi
(
fieldsPtr
+
offset
);
meta
.
type
=
Marshal
.
ReadByte
(
fieldsPtr
+
offset
+
65
);
meta
.
size
=
Marshal
.
ReadInt16
(
fieldsPtr
+
offset
+
66
);
metas
.
Add
(
meta
);
}
return
metas
;
}
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_fetch_row"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
FetchRows
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_free_result"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
FreeResult
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_close"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
Close
(
IntPtr
taos
);
//get precision in restultset
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_result_precision"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
ResultPrecision
(
IntPtr
taos
);
//schemaless API
[
DllImport
(
"taos"
,
SetLastError
=
true
,
EntryPoint
=
"taos_schemaless_insert"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
SchemalessInsert
(
IntPtr
taos
,
string
[]
lines
,
int
numLines
,
int
protocol
,
int
precision
);
}
}
tests/examples/C#/schemaless/schemalessSample.cs
0 → 100644
浏览文件 @
1a730894
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using
System
;
using
System.Text
;
using
System.Collections.Generic
;
using
System.Runtime.InteropServices
;
using
System.Collections
;
namespace
TDengineDriver
{
class
SchemalessSample
{
// connect parameters
private
string
host
=
"127.0.0.1"
;
private
string
configDir
=
"C:/TDengine/cfg"
;
private
string
user
=
"root"
;
private
string
passwd
=
"taosdata"
;
private
short
port
=
0
;
private
IntPtr
conn
=
IntPtr
.
Zero
;
private
string
dbName
=
"csharp"
;
private
string
dbPrecision
=
"ms"
;
static
void
Main
(
string
[]
args
)
{
string
[]
lines
=
{
"stg,t1=3i64,t2=4f64,t3=\"t3\" c1=3i64,c3=L\"passit\",c2=false,c4=4f64 1626006833639000000"
,
"stg,t1=4i64,t3=\"t4\",t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin\",c2=true,c4=5f64,c5=5f64 1626006833641000000"
};
string
[]
jsonStr
=
{
"{"
+
"\"metric\": \"stb0_0\","
+
"\"timestamp\": 1626006833,"
+
"\"value\": 10,"
+
"\"tags\": {"
+
" \"t1\": true,"
+
"\"t2\": false,"
+
"\"t3\": 10,"
+
"\"t4\": \"123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>\""
+
"}"
+
"}"
};
SchemalessSample
sample
=
new
SchemalessSample
();
sample
.
InitTDengine
();
sample
.
ConnectTDengine
();
sample
.
dropDatabase
();
sample
.
createDatabase
();
sample
.
useDatabase
();
sample
.
schemalessInsert
(
lines
,
2
,
(
int
)
TDengineSchemalessProtocol
.
TSDB_SML_LINE_PROTOCOL
,
(
int
)
TDengineSchemalessPrecision
.
TSDB_SML_TIMESTAMP_NANO_SECONDS
);
sample
.
checkSelect
(
"stg"
);
sample
.
schemalessInsert
(
jsonStr
,
1
,(
int
)
TDengineSchemalessProtocol
.
TSDB_SML_JSON_PROTOCOL
,(
int
)
TDengineSchemalessPrecision
.
TSDB_SML_TIMESTAMP_SECONDS
);
sample
.
checkSelect
(
"stb0_0"
);
sample
.
CloseConnection
();
sample
.
cleanup
();
}
public
void
InitTDengine
()
{
TDengine
.
Options
((
int
)
TDengineInitOption
.
TDDB_OPTION_CONFIGDIR
,
this
.
configDir
);
TDengine
.
Options
((
int
)
TDengineInitOption
.
TDDB_OPTION_SHELL_ACTIVITY_TIMER
,
"60"
);
Console
.
WriteLine
(
"init..."
);
TDengine
.
Init
();
Console
.
WriteLine
(
"get connection starting..."
);
}
public
void
ConnectTDengine
()
{
string
db
=
""
;
this
.
conn
=
TDengine
.
Connect
(
host
,
this
.
user
,
this
.
passwd
,
db
,
this
.
port
);
if
(
this
.
conn
==
IntPtr
.
Zero
)
{
Console
.
WriteLine
(
"connection failed: "
+
this
.
host
);
ExitProgram
();
}
else
{
Console
.
WriteLine
(
"[ OK ] Connection established."
);
}
}
public
void
createDatabase
()
{
StringBuilder
sql
=
new
StringBuilder
();
sql
.
Append
(
"create database if not exists "
).
Append
(
this
.
dbName
).
Append
(
" precision '"
).
Append
(
this
.
dbPrecision
).
Append
(
"'"
);
execute
(
sql
.
ToString
());
}
public
void
useDatabase
()
{
StringBuilder
sql
=
new
StringBuilder
();
sql
.
Append
(
"use "
).
Append
(
this
.
dbName
);
execute
(
sql
.
ToString
());
}
public
void
checkSelect
(
String
tableName
)
{
StringBuilder
sql
=
new
StringBuilder
();
sql
.
Append
(
"select * from "
).
Append
(
this
.
dbName
).
Append
(
"."
).
Append
(
tableName
);
ExecuteQuery
(
sql
.
ToString
());
}
public
void
schemalessInsert
(
string
[]
sqlstr
,
int
lineCnt
,
int
protocol
,
int
precision
)
{
IntPtr
res
=
TDengine
.
SchemalessInsert
(
this
.
conn
,
sqlstr
,
lineCnt
,
protocol
,
precision
);
if
(
TDengine
.
ErrorNo
(
res
)
!=
0
)
{
Console
.
WriteLine
(
"schemaless_insert failed:{0}"
,
TDengine
.
Error
(
res
));
Console
.
WriteLine
(
"line string:{0}"
,
sqlstr
);
Console
.
WriteLine
(
""
);
ExitProgram
();
}
else
{
Console
.
WriteLine
(
"else"
);
Console
.
WriteLine
(
"schemaless insert success:{0}"
,
TDengine
.
ErrorNo
(
res
));
}
DisplayRes
(
res
);
}
public
void
dropDatabase
()
{
StringBuilder
sql
=
new
StringBuilder
();
sql
.
Append
(
"drop database if exists "
).
Append
(
this
.
dbName
);
execute
(
sql
.
ToString
());
}
public
void
execute
(
string
sql
)
{
DateTime
dt1
=
DateTime
.
Now
;
IntPtr
res
=
TDengine
.
Query
(
this
.
conn
,
sql
.
ToString
());
DateTime
dt2
=
DateTime
.
Now
;
TimeSpan
span
=
dt2
-
dt1
;
if
((
res
==
IntPtr
.
Zero
)
||
(
TDengine
.
ErrorNo
(
res
)
!=
0
))
{
Console
.
Write
(
sql
.
ToString
()
+
" failure, "
);
if
(
res
!=
IntPtr
.
Zero
)
{
Console
.
Write
(
"reason: "
+
TDengine
.
Error
(
res
));
}
Console
.
WriteLine
(
""
);
ExitProgram
();
}
else
{
Console
.
WriteLine
(
sql
.
ToString
()
+
" success"
);
}
TDengine
.
FreeResult
(
res
);
}
public
void
DisplayRes
(
IntPtr
res
)
{
long
queryRows
=
0
;
int
fieldCount
=
TDengine
.
FieldCount
(
res
);
List
<
TDengineMeta
>
metas
=
TDengine
.
FetchFields
(
res
);
for
(
int
j
=
0
;
j
<
metas
.
Count
;
j
++)
{
TDengineMeta
meta
=
(
TDengineMeta
)
metas
[
j
];
}
IntPtr
rowdata
;
StringBuilder
builder
=
new
StringBuilder
();
while
((
rowdata
=
TDengine
.
FetchRows
(
res
))
!=
IntPtr
.
Zero
)
{
queryRows
++;
for
(
int
fields
=
0
;
fields
<
fieldCount
;
++
fields
)
{
TDengineMeta
meta
=
metas
[
fields
];
int
offset
=
IntPtr
.
Size
*
fields
;
IntPtr
data
=
Marshal
.
ReadIntPtr
(
rowdata
,
offset
);
builder
.
Append
(
"---"
);
if
(
data
==
IntPtr
.
Zero
)
{
builder
.
Append
(
"NULL"
);
continue
;
}
switch
((
TDengineDataType
)
meta
.
type
)
{
case
TDengineDataType
.
TSDB_DATA_TYPE_BOOL
:
bool
v1
=
Marshal
.
ReadByte
(
data
)
==
0
?
false
:
true
;
builder
.
Append
(
v1
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TINYINT
:
byte
v2
=
Marshal
.
ReadByte
(
data
);
builder
.
Append
(
v2
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_SMALLINT
:
short
v3
=
Marshal
.
ReadInt16
(
data
);
builder
.
Append
(
v3
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_INT
:
int
v4
=
Marshal
.
ReadInt32
(
data
);
builder
.
Append
(
v4
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BIGINT
:
long
v5
=
Marshal
.
ReadInt64
(
data
);
builder
.
Append
(
v5
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_FLOAT
:
float
v6
=
(
float
)
Marshal
.
PtrToStructure
(
data
,
typeof
(
float
));
builder
.
Append
(
v6
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_DOUBLE
:
double
v7
=
(
double
)
Marshal
.
PtrToStructure
(
data
,
typeof
(
double
));
builder
.
Append
(
v7
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BINARY
:
string
v8
=
Marshal
.
PtrToStringAnsi
(
data
);
builder
.
Append
(
v8
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TIMESTAMP
:
long
v9
=
Marshal
.
ReadInt64
(
data
);
builder
.
Append
(
v9
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_NCHAR
:
string
v10
=
Marshal
.
PtrToStringAnsi
(
data
);
builder
.
Append
(
v10
);
break
;
}
}
builder
.
Append
(
"---"
);
if
(
queryRows
<=
10
)
{
Console
.
WriteLine
(
builder
.
ToString
());
}
builder
.
Clear
();
}
if
(
TDengine
.
ErrorNo
(
res
)
!=
0
)
{
Console
.
Write
(
"Query is not complete, Error {0:G}"
,
TDengine
.
ErrorNo
(
res
),
TDengine
.
Error
(
res
));
}
Console
.
WriteLine
(
""
);
TDengine
.
FreeResult
(
res
);
}
public
void
ExecuteQuery
(
string
sql
)
{
DateTime
dt1
=
DateTime
.
Now
;
IntPtr
res
=
TDengine
.
Query
(
conn
,
sql
);
DateTime
dt2
=
DateTime
.
Now
;
TimeSpan
span
=
dt2
-
dt1
;
if
((
res
==
IntPtr
.
Zero
)
||
(
TDengine
.
ErrorNo
(
res
)
!=
0
))
{
Console
.
Write
(
sql
.
ToString
()
+
" failure, "
);
if
(
res
!=
IntPtr
.
Zero
)
{
Console
.
Write
(
"reason: "
+
TDengine
.
Error
(
res
));
}
Console
.
WriteLine
(
""
);
ExitProgram
();
}
Console
.
WriteLine
(
"[OK] time cost: "
+
span
.
ToString
()
+
"ms, execute statement ====> "
+
sql
.
ToString
());
DisplayRes
(
res
);
}
public
void
CloseConnection
()
{
if
(
this
.
conn
!=
IntPtr
.
Zero
)
{
TDengine
.
Close
(
this
.
conn
);
Console
.
WriteLine
(
"connection closed."
);
}
}
static
void
ExitProgram
()
{
System
.
Environment
.
Exit
(
0
);
}
public
void
cleanup
()
{
Console
.
WriteLine
(
"clean up..."
);
System
.
Environment
.
Exit
(
0
);
}
// method to get db precision
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录