关键词
Kdbndp、net core
1. Kdbndp简介
Kdbndp是完全使用C#语言实现,完全兼容ADO.NET,其API应该与其他.NET数据库驱动程序几乎完全相同。
2. 支持版本
netstandard2.0
3. 连接串参数解析
3.1. 标准(通常使用)
- Server=127.0.0.1;Port=5432;Database=myDataBase;User Id=myUsername;Password=myPassword;
复制代码
3.2. 使用Windows安全性验证
- Server=127.0.0.1;Port=5432;Database=myDataBase;Integrated Security=true;
复制代码
3.3. 设置命令超时
- Server=127.0.0.1;Port=5432;Database=myDataBase;User Id=myUsername;Password=myPassword;CommandTimeout=20;
复制代码
参数以秒为单位进行测量,并控制在抛出错误之前等待命令完成的时间。
3.4. 设置连接超时
- Server=127.0.0.1;Port=5432;Database=myDataBase;User Id=myUsername;Password=myPassword;Timeout=15;
复制代码
参数以秒为单位进行测量,并控制在抛出错误之前等待连接打开的时间。
3.5. 指定协议版本
- Server=127.0.0.1;Port=5432;Database=myDataBase;User Id=myUsername;Password=myPassword;Protocol=3;
复制代码
密钥协议的有效值为2或3。
3.6. SSL已激活
- Server=127.0.0.1;Port=5432;Database=myDataBase;Userid=myUsername;Password=myPassword;Protocol=3;SSL=true;SslMode=Require;
复制代码
3.7. 没有SSL
- Server=127.0.0.1;Port=5432;Database=myDataBase;Userid=myUsername;Password=myPassword;Protocol=3;SSL=false;SslMode=Disable;
复制代码
3.8. 使用连接池
- Server=127.0.0.1;Port=5432;Database=myDataBase;Userid=myUsername;Password=myPassword;Protocol=3;Pooling=true;MinPoolSize=1;MaxPoolSize=20;ConnectionLifeTime=15;
复制代码
MaxPoolSize的值介于0到1024,默认值100,ConnectionLifeTime为连接池中连接数超过MaxPoolSize后关闭未使用连接等待的时间。
4. 在.net core中使用Kdbndp.dll
4.1. 创建项目
- 打开 Visual Studio 2017;
- “文件”>“新建”>“项目...”;
- 从左侧菜单中选择“已安装”>“Visual C#”->“.NET core”;
- 选择“控制台应用(.NET Core)”项目模板;
- 将项目命名为 Kdbndp_net_core (项目名),并单击“确定”;
4.2. 添加引用以及依赖包
添加依赖包System.Runtime.CompilerServices.Unsafe,在Nuget控制台输入以下命令
- cd kdbndp_net_core
- dotnet add package System.Runtime.CompilerServices.Unsafe
复制代码
执行完成后会看到“依赖项”->“Nuget”下有如下引用:
添加Kdbndp.dll的引用:“依赖项”->“添加引用”添加Kdbndp.dll
4.3. 简单用例
引用命名空间
- using Kdbndp;
- using KdbndpTypes;
- 用例函数
- static void TestKdbndp()
- {
- const string ConnectionString = "Server=192.168.28.212;User ID=SYSTEM;Password=MANAGER;Database=KDBNDP_TESTS;Port=54328";
- var conn = new KdbndpConnection(ConnectionString);
- try
- {
- conn.Open();
- // create table
- const string createTable =
- @"CREATE TABLE PERSON3 (
- person_id serial PRIMARY KEY NOT NULL,
- person_uuid uuid NOT NULL
- ) WITH(OIDS=FALSE);";
- var command = new KdbndpCommand(createTable, conn);
- command.ExecuteNonQuery();
- var uuidDbParam = new KdbndpParameter(":param1", KdbndpDbType.Uuid);
- uuidDbParam.Value = Guid.NewGuid();
- // add data
- command = new KdbndpCommand(@"INSERT INTO PERSON3 (person_uuid) VALUES (:param1);", conn);
- command.Parameters.Add(uuidDbParam);
- command.ExecuteNonQuery();
- //select data
- command = new KdbndpCommand("SELECT person_uuid::uuid FROM PERSON3", conn);
- using (var reader = command.ExecuteReader())
- {
- if (reader.Read())
- {
- Console.WriteLine(reader.GetFieldValue<Guid>(0));
- }
- }
- // update data
- uuidDbParam = new KdbndpParameter(":param2", KdbndpDbType.Uuid);
- uuidDbParam.Value = Guid.NewGuid();
- command = new KdbndpCommand(@"update PERSON3 set person_uuid=:param2;", conn);
- command.Parameters.Add(uuidDbParam);
- command.ExecuteNonQuery();
- //after update,select data
- command = new KdbndpCommand("SELECT person_uuid::uuid FROM PERSON3", conn);
- using (var reader = command.ExecuteReader())
- {
- if (reader.Read())
- {
- Console.WriteLine(reader.GetFieldValue<Guid>(0));
- }
- }
- //delete data
- command = new KdbndpCommand(@"delete from PERSON3;", conn);
- command.ExecuteNonQuery();
- //after delete,select data
- command = new KdbndpCommand("SELECT person_uuid::uuid FROM PERSON3", conn);
- using (var reader = command.ExecuteReader())
- {
- if (reader.Read())
- {
- Console.WriteLine(reader.GetFieldValue<Guid>(0));
- }
- }
- }
- catch (KingbaseException e)
- {
- if (e.SqlState == "3D000")
- Console.Write("Please create a database kdbndp_tests, owned by user kdbndp_tests");
- else if (e.SqlState == "28P01")
- Console.Write("Please create a user kdbndp_tests as follows: create user kdbndp_tests with password 'kdbndp_tests'");
- else
- throw;
- }
- conn.Close();
- }
复制代码
5. 在.net Framework中使用Kdbndp.dll
只需引用Kdbndp.dll即可,.net core中测试函数可使用