Skip to content

.NET 下的标准库实现并测试 #15

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions aliyun-tablestore-csharp-sdk.sln
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28010.2050
# Visual Studio Version 16
VisualStudioVersion = 16.0.30611.23
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aliyun-tablestore-sdk", "sdk\aliyun-tablestore-sdk.csproj", "{AB5EFCA2-53A9-42B5-861E-3FD6F865036B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aliyun-tablestore-sdk-test", "test\aliyun-tablestore-sdk-test.csproj", "{F30E0874-399A-4FBD-B72B-74EE36B31AF6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aliyun-tablestore-sdk-sample", "sample\aliyun-tablestore-sdk-sample.csproj", "{D151C869-BC8F-4465-9460-5103A25D21E9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "aliyun-tablestore-netstandard-sdk", "netstandard-sdk\aliyun-tablestore-netstandard-sdk.csproj", "{9D75067C-1B14-45BC-94C4-8DB2ED5EEF93}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "aliyun-tablestore-netcore-sdk-sample", "netcore-sample\aliyun-tablestore-netcore-sdk-sample.csproj", "{4E840B62-46EE-49DC-B140-43884CAAF4CF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -27,6 +31,14 @@ Global
{D151C869-BC8F-4465-9460-5103A25D21E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D151C869-BC8F-4465-9460-5103A25D21E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D151C869-BC8F-4465-9460-5103A25D21E9}.Release|Any CPU.Build.0 = Release|Any CPU
{9D75067C-1B14-45BC-94C4-8DB2ED5EEF93}.Debug|Any CPU.ActiveCfg = Release|Any CPU
{9D75067C-1B14-45BC-94C4-8DB2ED5EEF93}.Debug|Any CPU.Build.0 = Release|Any CPU
{9D75067C-1B14-45BC-94C4-8DB2ED5EEF93}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9D75067C-1B14-45BC-94C4-8DB2ED5EEF93}.Release|Any CPU.Build.0 = Release|Any CPU
{4E840B62-46EE-49DC-B140-43884CAAF4CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4E840B62-46EE-49DC-B140-43884CAAF4CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4E840B62-46EE-49DC-B140-43884CAAF4CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4E840B62-46EE-49DC-B140-43884CAAF4CF}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
31 changes: 31 additions & 0 deletions netcore-sample/Config.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
namespace Aliyun.OTS.Samples
{
internal static class Config
{
public static string AccessKeyId = "<your access key id>";

public static string AccessKeySecret = "<your access key secret>";

public static string Endpoint = "<your endpoint>";

public static string InstanceName = "<your instance name>";

private static OTSClient OtsClient = null;

public static OTSClient GetClient()
{
if (OtsClient != null)
{
return OtsClient;
}

OTSClientConfig config = new OTSClientConfig(Endpoint, AccessKeyId, AccessKeySecret, InstanceName)
{
OTSDebugLogHandler = null,
OTSErrorLogHandler = null
};
OtsClient = new OTSClient(config);
return OtsClient;
}
}
}
56 changes: 56 additions & 0 deletions netcore-sample/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using System;
namespace Aliyun.OTS.Samples
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Aliyun Table Store SDK for .NET Samples!");

try
{
ClientInitialize.InitializeClient();

CreateTableSample.TableOperations();

SingleRowReadWriteSample.PutRow();
SingleRowReadWriteSample.PutRowAsync();

SingleRowReadWriteSample.UpdateRow();

SingleRowReadWriteSample.GetRow();
SingleRowReadWriteSample.GetRowWithFilter();

MultiRowReadWriteSample.BatchWriteRow();

MultiRowReadWriteSample.GetRange();
MultiRowReadWriteSample.GetRangeWithFilter();
MultiRowReadWriteSample.GetIterator();

MultiRowReadWriteSample.BatchGetRow();
MultiRowReadWriteSample.BatchGetRowWithFilter();

ConditionUpdateSample.ConditionPutRow();
ConditionUpdateSample.ConditionUpdateRow();
ConditionUpdateSample.ConditionDeleteRow();
ConditionUpdateSample.ConditionBatchWriteRow();
}
catch (OTSClientException ex)
{
Console.WriteLine("Failed with client exception:{0}", ex.Message);
}
catch (OTSServerException ex)
{
Console.WriteLine("Failed with server exception:{0}, {1}", ex.Message, ex.RequestID);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}

Console.WriteLine("Press any key to continue . . . ");

Console.ReadKey(true);
}
}
}
172 changes: 172 additions & 0 deletions netcore-sample/Samples/AtomicIncrementSample.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
using System;
using System.Collections.Generic;
using Aliyun.OTS.DataModel;
using Aliyun.OTS.Request;
using Aliyun.OTS.Response;

namespace Aliyun.OTS.Samples.Samples
{
/// <summary>
/// 原子自增示例
/// 可以指定某一列为原子自增列,每次按照指定的数值进行累加。
/// </summary>
public class AtomicIncrementSample
{
private static readonly string TableName = "AtomicIncrementSample";

private static readonly string Pk1 = "Pk1";
private static readonly string Pk2 = "Pk2";
private static readonly string IncrementCol = "IncrementCol";


//static void Main(string[] args)
//{
// Console.WriteLine("AtomicIncrementSample");

// //准备表
// PrepareTable();

// //新增一行,设置IncrementCol这个属性列的初始值为0
// PutRow();

// //对IncrementCol执行原子自增,10次,每次加1
// for (int i = 0; i < 10; i++)
// {
// Increment(1);
// }

// //获取自增后的列
// GetRow();

// Console.ReadLine();

//}


private static void PrepareTable()
{
// 创建表
OTSClient otsClient = Config.GetClient();

IList<string> tables = otsClient.ListTable(new ListTableRequest()).TableNames;
if (tables.Contains(TableName))
{
return;
}

PrimaryKeySchema primaryKeySchema = new PrimaryKeySchema
{
{ Pk1, ColumnValueType.Integer },
{ Pk2, ColumnValueType.String }
};
TableMeta tableMeta = new TableMeta(TableName, primaryKeySchema);

CapacityUnit reservedThroughput = new CapacityUnit(0, 0);
CreateTableRequest request = new CreateTableRequest(tableMeta, reservedThroughput);
otsClient.CreateTable(request);

}

public static void PutRow()
{
Console.WriteLine("Start put row...");
OTSClient otsClient = Config.GetClient();

// 定义行的主键,必须与创建表时的TableMeta中定义的一致
PrimaryKey primaryKey = new PrimaryKey
{
{ Pk1, new ColumnValue(0) },
{ Pk2, new ColumnValue("abc") }
};

// 定义要写入该行的属性列
AttributeColumns attribute = new AttributeColumns
{
{ IncrementCol, new ColumnValue(0) }
};
PutRowRequest request = new PutRowRequest(TableName, new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute);

otsClient.PutRow(request);
Console.WriteLine("Put row succeed.");
}


/// <summary>
/// 更新行的时候,指定某一列为原子自增列,并对这一列进行原子自增
/// </summary>
public static void Increment(int incrementValue)
{
Console.WriteLine("Start set increment column...");
OTSClient otsClient = Config.GetClient();

// 定义行的主键,必须与创建表时的TableMeta中定义的一致
PrimaryKey primaryKey = new PrimaryKey
{
{ Pk1, new ColumnValue(0) },
{ Pk2, new ColumnValue("abc") }
};
RowUpdateChange rowUpdateChange = new RowUpdateChange(TableName, primaryKey);
rowUpdateChange.ReturnType = ReturnType.RT_AFTER_MODIFY;
rowUpdateChange.ReturnColumnNames = new List<string>() { IncrementCol};
//设置一个原子自增列,这一列从0开始自增,每次增增加1。
rowUpdateChange.Increment(new Column(IncrementCol, new ColumnValue(incrementValue)));

UpdateRowRequest updateRowRequest = new UpdateRowRequest(rowUpdateChange);

var response = otsClient.UpdateRow(updateRowRequest);
Console.WriteLine("set Increment column succeed,Increment result:" + response.Row.GetColumns()[0].Value);
}


public static void GetRow()
{
Console.WriteLine("Start get row...");
PrepareTable();
OTSClient otsClient = Config.GetClient();

// 定义行的主键,必须与创建表时的TableMeta中定义的一致
PrimaryKey primaryKey = new PrimaryKey
{
{ Pk1, new ColumnValue(0) },
{ Pk2, new ColumnValue("abc") }
};

GetRowRequest request = new GetRowRequest(TableName, primaryKey); // 未指定读哪列,默认读整行
GetRowResponse response = otsClient.GetRow(request);
PrimaryKey primaryKeyRead = response.PrimaryKey;
AttributeColumns attributesRead = response.Attribute;

Console.WriteLine("Primary key read: ");
foreach (KeyValuePair<string, ColumnValue> entry in primaryKeyRead)
{
Console.WriteLine(entry.Key + ":" + PrintColumnValue(entry.Value));
}

Console.WriteLine("Attributes read: ");
foreach (KeyValuePair<string, ColumnValue> entry in attributesRead)
{
Console.WriteLine(entry.Key + ":" + PrintColumnValue(entry.Value));
}

Console.WriteLine("Get row succeed.");
}



private static string PrintColumnValue(ColumnValue value)
{
switch (value.Type)
{
case ColumnValueType.String: return value.StringValue;
case ColumnValueType.Integer: return value.IntegerValue.ToString();
case ColumnValueType.Boolean: return value.BooleanValue.ToString();
case ColumnValueType.Double: return value.DoubleValue.ToString();
case ColumnValueType.Binary: return value.BinaryValue.ToString();
}

throw new Exception("Unknow type.");
}


}
}
90 changes: 90 additions & 0 deletions netcore-sample/Samples/AutoIncrementSample.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
using System;
using System.Collections.Generic;
using Aliyun.OTS.DataModel;
using Aliyun.OTS.Request;
using Aliyun.OTS.Response;

namespace Aliyun.OTS.Samples.Samples
{
/// <summary>
/// 主键列自增示例
/// </summary>
public class AutoIncrementSample
{
private static readonly string TableName = "AutoIncrementSample";

private static readonly string Pk1 = "Pk1";
private static readonly string Pk2 = "Pk2_AutoIncrement";


//static void Main(string[] args)
//{
// Console.WriteLine("AutoIncrementSample");

// //创建一个带自增列的表
// CreateTableWithAutoIncrementPk();

// //写入10行,自增列Pk2将
// for (int i = 0; i < 10; i++)
// {
// PutRow(i.ToString());
// }

// Console.ReadLine();

//}

/// <summary>
/// 创建一个带自增列的表
/// </summary>
private static void CreateTableWithAutoIncrementPk()
{

OTSClient otsClient = Config.GetClient();

IList<string> tables = otsClient.ListTable(new ListTableRequest()).TableNames;
if (tables.Contains(TableName))
{
return;
}

PrimaryKeySchema primaryKeySchema = new PrimaryKeySchema
{
{ Pk1, ColumnValueType.String },
//指定Pk2为自增列主键
{ Pk2, ColumnValueType.Integer, PrimaryKeyOption.AUTO_INCREMENT}
};
TableMeta tableMeta = new TableMeta(TableName, primaryKeySchema);

CapacityUnit reservedThroughput = new CapacityUnit(0, 0);
CreateTableRequest request = new CreateTableRequest(tableMeta, reservedThroughput);
otsClient.CreateTable(request);

}

public static void PutRow(string pk1Value)
{
Console.WriteLine("Start put row...");
OTSClient otsClient = Config.GetClient();

// 定义行的主键,必须与创建表时的TableMeta中定义的一致
PrimaryKey primaryKey = new PrimaryKey
{
{ Pk1, new ColumnValue(pk1Value) },
{ Pk2, ColumnValue.AUTO_INCREMENT }
};

// 定义要写入该行的属性列
AttributeColumns attribute = new AttributeColumns
{
{ "Col1", new ColumnValue(0) }
};
PutRowRequest request = new PutRowRequest(TableName, new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute);
request.RowPutChange.ReturnType = ReturnType.RT_PK;

var response = otsClient.PutRow(request);
Console.WriteLine("Put row succeed,autoIncrement Pk value:"+ response.Row.GetPrimaryKey()[Pk2].IntegerValue);
}

}
}
Loading