taosdata / taos-connector-csharp Goto Github PK
View Code? Open in Web Editor NEWEntityFramework, EF Core, ADO.NET, ORM,Stmt,TDengine
License: MIT License
EntityFramework, EF Core, ADO.NET, ORM,Stmt,TDengine
License: MIT License
当查询的数据不含有第一列,也就是主键列(TIMESTAMP),会报一下错误:
Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
` using (TaosConnection conn = DataBase.TDConnect())
{
conn.Open();
#region 原始数据数据插入
string tableName = "a_" + channels.AcquisitSerialNumber + "" + channels.ChannelNumber + "" + channels.SampleRate;
int channleId = int.Parse(channels.ChannelNumber.Replace("AI", ""));
StringBuilder stringBuilder = new StringBuilder();
long timestamp = GetTimestamp(DateTime.Now);
int rows = (count / 15000) + (count % 15000 == 0 ? 0 : 1);
switch (channels.ChannelNumber)
{
case "AI0":
for (int j = 0; j < rows; j++)
{
int oneRow = j == rows - 1 ? count % 15000 : 15000;
for (int i = 0; i < oneRow; i++)
{
double orginal = 0;
while (!Params.CKDataPackagelist[channels.AcquisitSerialNumber].AI0.TryDequeue(out orginal)) ;
stringBuilder.Append("(" + timestamp + "," + orginal + ")");
timestamp++;
doubles[j * 15000 + i] = orginal;
}
conn.CreateCommand("insert into " + tableName + " using acceleration TAGS ('" + channels.AcquisitSerialNumber + "','" + channels.ChannelNumber + "'," + channels.SampleRate + ") VALUES " + stringBuilder).ExecuteNonQuery();
stringBuilder.Clear();
}
break;
default:
break;
}
_logger.LogTrace($"{DateTime.Now.TimeOfDay}:{channels.ChannelNumber}数据插入成功");
conn.Close();
}`
多线程调用该方法,两秒钟调用一次,每次插入六万条数据;
使用版本:2.0.478
错误日志:
出现这个错误的原因可能是什么?
查询有几率报上述错误,经检查定位到最终的错误代码可能是在TaosConnection 的203行的Open
方法报的错,能给排查下具体是什么问题导致的吗?
以下是我的代码
using (var connection = new TaosConnection(builder.ConnectionString)) { connection.Open(); var cmd_select = connection.CreateCommand(); cmd_select.CommandText = $"select last_row(*) from {_tdengineConfig.DbName}.{tableName}"; using (var reader = cmd_select.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { foreach (var item in codes) { ls.Add(item, reader[item]); } } } } }
TDengine版本:3.0.2.4
sql:select * from meters limit 1000000
使用如下代码查询
static void Main(string[] args)
{
var connectionStringBuilder = new TaosConnectionStringBuilder
{
DataSource = "10.32.3.33",
Port = 6041,
Username = "root",
Password = "taosdata",
DataBase = "test"
};
connectionStringBuilder.UseWebSocket();
using var connection = new TaosConnection(connectionStringBuilder.ConnectionString);
connection.Open();
using var command = connection.CreateCommand();
command.CommandText = "select * from meters limit 1000000";
var reader = command.ExecuteReader();
var result = reader.ToDataTable();
Console.WriteLine(result.Rows.Count); // print 4096
}
返回数据行只有4096?
现在涛思官方提供的客户端驱动要求必须服务器版本唯一匹配,而项目中包含的驱动库taos.dll(.so) 好像也没有什么用,是否可以考虑从项目中去掉并且自动从驱动安装目录中加载?
我看源码是检测 table 或者 database 是否已经存在,如果存在则不创建,不存在则创建。但是我发现再执行时我这里存在几个问题。
数据库服务我装的是 docker 版本 1.6.5.9
建库或者建表的时候直接使用 IF NOT EXISTS 语句来建,数据库本身会自动检测是否存在,不存在则建表。我通过你的接口发现 SHOW DATABASES 能获取到表的原始数据,但是反序列化后所有为 string 的字段结果为 null,如: name 与 status,但是 stable 这些能获取到正确的数值。所以导致你在检测库是否存在的时候出现错误,也就是明明存在库,你获取不到库的名称。
不知道你是否存在这种故障,建完库与表之后,后面的插入语句无法执行,提示已经与数据库断开了。
还有一个疑问就是,因为我不懂,请问使用 taos.dll 引用方式在 linux 平台可以使用吗?因为在我的思维里面貌似 NF 才能引用 win32 的dll,linux 下的库应该与 win 下不一样吧。
Great work!
double free or corruption (fasttop)
由于现在这个arm架构的刚刚支持1.6.6,发现调用的时候存在问题,连接不上,
连接成功,执行sql语句提示服务不可用
从老版本Maikebing.Data.Taos更新到新的IoTSharp.Data.Taos后,程序内存一直涨降不下来,使用Windbg分析了一下dump文件 发现
00007ffe8de93548 2705 129840 System.Text.StringBuilder
00007ffe8e42b5d8 2 161344 System.Int64[]
00007ffe8dc96860 1943 229792 System.Object[]
00007ffe8dd57a90 10176 1005538 System.String
00007ffe8de16e18 3686 1147906 System.Char[]
00007ffe8e428c60 377 1517048 GatewayServer.TDengineConsumer.rtags[]
000000be0a5a0440 1495 2013680 Free
00007ffe8e4fe038 3 2129992 System.WeakReference1[[IoTSharp.Data.Taos.TaosCommand, IoTSharp.Data.Taos]][] 00007ffe8dd9bf30 5799 4081100 System.Byte[] 00007ffe8e4fc8e8 216800 5203200 System.WeakReference
1[[IoTSharp.Data.Taos.TaosCommand, IoTSharp.Data.Taos]]
有多大20w的taosCommand个对象未释放,请教下 是和这个有关系吗。
程序只是从老版本更新了这个驱动,其他的逻辑基本没变化。
https://github.com/IoTSharp/EntityFrameworkCore.Taos .Net 社区维护的版本, 基本能确保资源的可靠性。
哈哈,下一步考虑可以把连接池加上.提高并发性能.
Originally posted by @pigwing in taosdata/TDengine#11695 (comment)
Maikebing.Data.Taos支持http请求吗
使用2.0.1.1服务器做测试,创建数据库和表均失败
请教作者,有没有考虑TDENGINE里STABLE的概念,如果在 Entity Framework Core 代码里有没有对应?
作者你好,什么时候考虑支持数据订阅功能呢?
你好,作者,我在使用过程中发现,执行sql一直报错的话,非托管内存持续增长
是否支持使用RESTful方式连接到TDengine Cloud?
我只想用 efcore,是必须要同时安装Maikebing.EntityFrameworkCore.Taos和Maikebing.Data.Taos吗?
怎么用EFCore
的GroupBy
?
var queryable = await SprResultRepository.GetQueryableAsync();
var query = queryable.GroupBy(x => new { x.DeviceName, x.ProgNo, x.Quality })
.ToList();
上面的语句报错:
Unable to translate the given 'GroupBy' pattern. Call 'AsEnumerable' before 'GroupBy' to evaluate it client-side.
不会吧!GroupBy
难道只能在客户端实现吗?
CreateCommand时报以下错误:
System.AccessViolationException
HResult=0x80004003
Message=Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Source=<无法计算异常源>
StackTrace:
<无法计算异常堆栈跟踪>
换回2.0.304后正常。
另外,根据2.0.2.0提供的新的客户端接口函数taos_subscribe、taos_insert_lines、taos_open_stream能否增加新的功能?例如采用类似SqlBulkCopy函数实现数据批复制,方便数据迁移或备份恢复?
什么时候支持TD 3.0 尝试用现有类库去获取表所有列,只能返回首列。
TD2.6是正常。
select first(value) from iot_datas where ts>'2021-06-09 10:01:00' and ts<'2021-06-09 11:00:00' and tbname in ('iot_data_319400013') INTERVAL(9m,4m) FILL(NULL) limit 10;
这种sql怎么通过linq写,或者是其他方式实现
问题:
使用Schemaless 写入模式,在客户端配置了smlChildTableName tname,使用c#写入st,tname=cpu1,t1=4 c1=3 1648432611250时,还是产生随机的子表名,
版本:
V3.0.1.6
问题分析:
初始化时默认Windows环境配置文件路径为 configDir = "C:/TDengine/cfg"; 为了方便部署所有将配置文件放到程序运行目录,避免每个用户都需要安装
解决建议:
1、通过文件判断当前程序目录中是否有配置文件,如果有优先使用程序目录对应配置。
2、通过文件判断C:/TDengine/cfg是否存在配置文件,无对应配置文件,初始化抛异常提示。
3、支持外部指定configDir 参数的路径
如题: 我使用你写的这个库做了测试, 发现每次只能传递一条sql语句, 无聊是 insert into 还是 import into, 这样的话, 对于设备频繁上送的报文, 使用 rest api 一遍遍的调用怕是性能还不如传统的关系型数据库了!
这个问题是, TDengine 本身rest api每次只能接受一条 sql 语句还是什么您的库的问题了?
代码里默认是6060
public static string RemoveNull(this string str)
{
return (!string.IsNullOrEmpty(str) && str.IndexOf('\0')>0)? str.Remove(str.IndexOf('\0')):str;
}
这里的RemoveNull
在对空nchar
字段数值(c#取出的是长度为n的\0,对应的str为)原样返回,导致通过取出的字符串作为where
条件向td进行查询时字符串被截断而引发异常。 对于这种情况期望的返回结果应该是string.Empty
。
可以用如下的代码进行测试:
byte[] bf = new byte[128];
var s = System.Text.Encoding.GetEncoding(936).GetString(bf)?.RemoveNull(); // 应该返回 string.empty
现在涛思官方提供的客户端驱动要求必须服务器版本唯一匹配,而项目中包含的驱动库taos.dll(.so) 好像也没有什么用,是否可以考虑从项目中去掉并且自动从驱动安装目录中加载?
直接拉这里的代码去调试,试了把6020和6060端口映射出来,测试的时候无法连接,报错:failed to connect to server,是否需要其他端口吗,求教。
比如按照对象模式创建了超级表。对象的表名为超级表的名称
那么如何在efcore模式下 按照不同tag去操作不通的表 而不是操作超级表?
写入时写入string.Empty,读出时变成了\u0000\u0000\u0000......
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.