[]
提供访问Forguncy表的方法。
public interface IDataAccess
将数据添加到指定的表。
void AddTableData(string tableName, Dictionary<string, object> newValues)
类型 | 名称 | 描述 |
---|---|---|
string | tableName | 要向其添加数据的表名。 |
System.Collections.Generic.Dictionary<TKey, TValue><string, object> | newValues | 作为字段名称和值的集合创建的其他数据。 |
下面的代码示例根据POST方法基于请求的内容将值添加到Forguncy表。
public class SampleApi : ForguncyApi
{
[Post]
public void AddSampleData()
{
StreamReader reader = new StreamReader(this.Context.Request.Body);
string message = reader.ReadToEnd();
Dictionary<string, object> values = new Dictionary<string, object>();
values.Add("date", DateTime.Now);
values.Add("message", message);
values.Add("ip", Context.Request.RemoteIpAddress);
this.DataAccess.AddTableData("SampleTable1", values);
}
}
将数据添加到指定的表。
Task AddTableDataAsync(string tableName, Dictionary<string, object> newValues)
类型 | 名称 | 描述 |
---|---|---|
string | tableName | 要向其添加数据的表名。 |
System.Collections.Generic.Dictionary<TKey, TValue><string, object> | newValues | 作为字段名称和值的集合创建的其他数据。 |
类型 | 描述 |
---|---|
System.Threading.Tasks.Task |
下面的代码示例根据POST方法基于请求的内容将值添加到Forguncy表。
public class SampleApi : ForguncyApi
{
[Post]
public async Task AddSampleData()
{
StreamReader reader = new StreamReader(this.Context.Request.Body);
string message = reader.ReadToEnd();
Dictionary<string, object> values = new Dictionary<string, object>();
values.Add("date", DateTime.Now);
values.Add("message", message);
values.Add("ip", Context.Request.RemoteIpAddress);
await this.DataAccess.AddTableDataAsync("SampleTable1", values);
}
}
开启事务
Task BeginTransactionAsync(string connectionStr, IsolationLevel isolationLevel)
类型 | 名称 | 描述 |
---|---|---|
string | connectionStr | 连接字符串,如果传 null 则表示内建库 |
System.Data.IsolationLevel | isolationLevel | 隔离级别 |
类型 | 描述 |
---|---|
System.Threading.Tasks.Task |
开启事务
Task BeginTransactionAsync(string connectionStr)
类型 | 名称 | 描述 |
---|---|---|
string | connectionStr | 连接字符串,如果传 null 则表示内建库 |
类型 | 描述 |
---|---|
System.Threading.Tasks.Task |
提交事务
Task CommitTransactionAsync(string connectionStr)
类型 | 名称 | 描述 |
---|---|---|
string | connectionStr | 连接字符串,如果传 null 则表示内建库 |
类型 | 描述 |
---|---|
System.Threading.Tasks.Task |
从表中删除与指定值匹配的记录。
void DeleteTableData(string tableName, ColumnValuePair primaryKey)
类型 | 名称 | 描述 |
---|---|---|
string | tableName | 要删除的表名。 |
ColumnValuePair | primaryKey | 字段名称/值对(使用唯一字段)以指定找到的集合。 |
下面的代码示例根据POST方法发出的请求的内容删除Forguncy表中的特定记录。
public class SampleApi : ForguncyApi
{
[Post]
public void DeleteDataSample()
{
StreamReader reader = new StreamReader(this.Context.Request.Body);
string message = reader.ReadToEnd();
var valuePair = JsonConvert.DeserializeObject<ColumnValuePair>(message);
this.DataAccess.DeleteTableData("SampleTable1", valuePair);
}
}
从表中删除与指定值匹配的记录。
Task DeleteTableDataAsync(string tableName, ColumnValuePair primaryKey)
类型 | 名称 | 描述 |
---|---|---|
string | tableName | 要删除的表名。 |
ColumnValuePair | primaryKey | 字段名称/值对(使用唯一字段)以指定找到的集合。 |
类型 | 描述 |
---|---|
System.Threading.Tasks.Task |
下面的代码示例根据POST方法发出的请求的内容删除Forguncy表中的特定记录。
public class SampleApi : ForguncyApi
{
[Post]
public async Task DeleteDataSample()
{
StreamReader reader = new StreamReader(this.Context.Request.Body);
string message = reader.ReadToEnd();
var valuePair = JsonConvert.DeserializeObject<ColumnValuePair>(message);
await this.DataAccess.DeleteTableDataAsync("SampleTable1", valuePair);
}
}
在指定数据库中执行Sql语句
Task<object> ExecuteSqlAsync(string connectionStringId, string sqlStatement, IDictionary<string, object> parameters, int timeout = 0)
类型 | 名称 | 描述 |
---|---|---|
string | connectionStringId | 连接字符串名称, 传 Null 表示内建库 |
string | sqlStatement | Sql 语句 |
System.Collections.Generic.IDictionary<TKey, TValue><string, object> | parameters | 参数列表。如果参数可能来自最终用户,请使用参数列表,而不是直接拼接 Sql 字符串,以避免 Sql 注入问题。 |
int | timeout | 超时时间,单位:秒。默认值为 0 表示不限制超时时间 |
类型 | 描述 |
---|---|
System.Threading.Tasks.Task<TResult><object> | 执行结果, 可能是DataTable也可能是数字(int),如果是查询Sql,用DataTable保存更新结果,如果是更新类的Sql,用int表示影响行数 |
以下为执行Sql方法的示例代码:
public class SampleApi : ForguncyApi
{
[Get]
public async Task ExecuteSqlAsync()
{
var connectionStringId = "demo-id";
var sqlStatement = "SELECT * FROM demo_table WHERE ID=@id";
var parameters = new Dictionary<string, object>
{
{ "id", 123 }
};
var timeout = 1000; // means 1 second
var result = await this.DataAccess.ExecuteSqlAsync(connectionStringId, sqlStatement, parameters, timeout);
var ans = new List<Dictionary<string, object>>();
if (result is DataTable datatable)
{
if (datatable.Rows.Count > 0)
{
foreach (DataRow row in datatable.Rows)
{
var cur = new Dictionary<string, object>();
foreach (DataColumn column in datatable.Columns)
{
cur.Add(column.ColumnName, row[column.ColumnName]);
}
ans.Add(cur);
}
}
}
}
}
生成SQL条件
object GenerateSqlCondition(Dictionary<string, object> queryInfos, string tableName)
类型 | 名称 | 描述 |
---|---|---|
System.Collections.Generic.Dictionary<TKey, TValue><string, object> | queryInfos | |
string | tableName |
类型 | 描述 |
---|---|
object |
根据活字格中的表名获取连接字符串
string GetConnectionString(string tableName)
类型 | 名称 | 描述 |
---|---|---|
string | tableName | 活字格中的表名 |
类型 | 描述 |
---|---|
string | 数据库连接字符串 |
如果指定表为内建表,返回的连接字符为空
类型 | 条件 |
---|---|
System.ArgumentException | 找不到指定表时引发该异常 |
通过数据库连接名称获取连接字符串
string GetConnectionStringByID(string connectionStringID)
类型 | 名称 | 描述 |
---|---|---|
string | connectionStringID | 数据库连接名称 |
类型 | 描述 |
---|---|
string | 数据库连接字符串 |
如果指定的数据库连接名称不存在,返回null
从表中获取与指定值匹配的记录。
Dictionary<string, object> GetTableData(string tableName, ColumnValuePair primaryKey)
类型 | 名称 | 描述 |
---|---|---|
string | tableName | 要获取的表名。 |
ColumnValuePair | primaryKey | 字段名称/值对(使用唯一字段)以指定找到的集合 |
类型 | 描述 |
---|---|
System.Collections.Generic.Dictionary<TKey, TValue><string, object> |
下面的代码示例根据POST方法请求的内容在Forguncy表中检索特定记录。
public class SampleApi : ForguncyApi
{
[Post]
public void GetDataSample()
{
StreamReader reader = new StreamReader(this.Context.Request.Body);
string message = reader.ReadToEnd();
var valuePair = JsonConvert.DeserializeObject<ColumnValuePair>(message);
using (var responseWriter = new StreamWriter(this.Context.Response.Body, Encoding.UTF8))
{
responseWriter.Write(JsonConvert.SerializeObject(this.DataAccess.GetTableData("SampleTable1", valuePair), Formatting.Indented));
}
}
}
通过指定OData路径获取一条记录。 在资源路径之后指定OData路径,但不包括根URI。
object GetTableData(string odataPath)
类型 | 名称 | 描述 |
---|---|---|
string | odataPath | OData路径。 |
类型 | 描述 |
---|---|
object |
下面的代码示例在POST方法中接收OData路径,并基于该路径检索Forguncy表中的记录。
public class SampleApi : ForguncyApi
{
[Post]
public void GetDataSampleByOData()
{
StreamReader reader = new StreamReader(this.Context.Request.Body);
string message = reader.ReadToEnd();
using (var responseWriter = new StreamWriter(this.Context.Response.Body, Encoding.UTF8))
{
responseWriter.Write(JsonConvert.SerializeObject(this.DataAccess.GetTableData(message), Formatting.Indented));
}
}
}
从表中获取与指定值匹配的记录。
Task<Dictionary<string, object>> GetTableDataAsync(string tableName, ColumnValuePair primaryKey)
类型 | 名称 | 描述 |
---|---|---|
string | tableName | 要获取的表名。 |
ColumnValuePair | primaryKey | 字段名称/值对(使用唯一字段)以指定找到的集合 |
类型 | 描述 |
---|---|
System.Threading.Tasks.Task<TResult><System.Collections.Generic.Dictionary<TKey, TValue><string, object>> |
下面的代码示例根据POST方法请求的内容在Forguncy表中检索特定记录。
public class SampleApi : ForguncyApi
{
[Post]
public async Task GetDataSample()
{
StreamReader reader = new StreamReader(this.Context.Request.Body);
string message = reader.ReadToEnd();
var valuePair = JsonConvert.DeserializeObject<ColumnValuePair>(message);
using (var responseWriter = new StreamWriter(this.Context.Response.Body, Encoding.UTF8))
{
responseWriter.Write(JsonConvert.SerializeObject(await this.DataAccess.GetTableDataAsync("SampleTable1", valuePair), Formatting.Indented));
}
}
}
通过指定OData路径获取一条记录。 在资源路径之后指定OData路径,但不包括根URI。
Task<object> GetTableDataAsync(string odataPath)
类型 | 名称 | 描述 |
---|---|---|
string | odataPath | OData路径。 |
类型 | 描述 |
---|---|
System.Threading.Tasks.Task<TResult><object> |
下面的代码示例在POST方法中接收OData路径,并基于该路径检索Forguncy表中的记录。
public class SampleApi : ForguncyApi
{
[Post]
public async Task GetDataSampleByOData()
{
StreamReader reader = new StreamReader(this.Context.Request.Body);
string message = reader.ReadToEnd();
using (var responseWriter = new StreamWriter(this.Context.Response.Body, Encoding.UTF8))
{
responseWriter.Write(JsonConvert.SerializeObject(await this.DataAccess.GetTableDataAsync(message), Formatting.Indented));
}
}
}
根据多个已编辑的数据更新(添加/编辑/删除)数据。
void ModifyTablesData(Dictionary<string, ModifyData> modifyData)
类型 | 名称 | 描述 |
---|---|---|
System.Collections.Generic.Dictionary<TKey, TValue><string, ModifyData> | modifyData | 要编辑的数据列表。 |
下面的代码示例添加,更新和删除多个数据。 添加到DeleteRows属性的ColumnValuePair对象必须指定一个唯一记录,例如ID/值。 添加到EditRows属性的EditData对象的PrimaryKey属性还必须具有唯一记录。
public class SampleApi : ForguncyApi
{
[Post]
public void ModifySampleData()
{
var data = new Dictionary<string, ModifyData>();
var modifyData = new ModifyData();
modifyData.AddRows.Add(new Dictionary<string, object>
{
{"字段1", 1 },
{"字段2", 2 }
});
modifyData.DeleteRows.Add(new ColumnValuePair()
{
ColumnName = "ID",
Value = 2
});
modifyData.EditRows.Add(new EditData()
{
PrimaryKey = new ColumnValuePair()
{
ColumnName = "ID",
Value = 3
},
Values = new Dictionary<string, object>
{
{"字段1", 1 },
{"字段2", 2 }
}
});
data.Add("表1", modifyData);
this.DataAccess.ModifyTablesData(data);
}
}
根据多个已编辑的数据更新(添加/编辑/删除)数据。
Task ModifyTablesDataAsync(Dictionary<string, ModifyData> modifyData)
类型 | 名称 | 描述 |
---|---|---|
System.Collections.Generic.Dictionary<TKey, TValue><string, ModifyData> | modifyData | 要编辑的数据列表。 |
类型 | 描述 |
---|---|
System.Threading.Tasks.Task |
下面的代码示例添加,更新和删除多个数据。 添加到DeleteRows属性的ColumnValuePair对象必须指定一个唯一记录,例如ID/值。 添加到EditRows属性的EditData对象的PrimaryKey属性还必须具有唯一记录。
public class SampleApi : ForguncyApi
{
[Post]
public async Task ModifySampleData()
{
var data = new Dictionary<string, ModifyData>();
var modifyData = new ModifyData();
modifyData.AddRows.Add(new Dictionary<string, object>
{
{"字段1", 1 },
{"字段2", 2 }
});
modifyData.DeleteRows.Add(new ColumnValuePair()
{
ColumnName = "ID",
Value = 2
});
modifyData.EditRows.Add(new EditData()
{
PrimaryKey = new ColumnValuePair()
{
ColumnName = "ID",
Value = 3
},
Values = new Dictionary<string, object>
{
{"字段1", 1 },
{"字段2", 2 }
}
});
data.Add("表1", modifyData);
await this.DataAccess.ModifyTablesDataAsync(data);
}
}
回滚事务
Task RollbackTransactionAsync(string connectionStr)
类型 | 名称 | 描述 |
---|---|---|
string | connectionStr | 连接字符串,如果传 null 则表示内建库 |
类型 | 描述 |
---|---|
System.Threading.Tasks.Task |
更新与指定值匹配的记录。
void UpdateTableData(string tableName, ColumnValuePair primaryKey, Dictionary<string, object> updateValues)
类型 | 名称 | 描述 |
---|---|---|
string | tableName | 更新目标表名称。 |
ColumnValuePair | primaryKey | 字段名称/值对(使用唯一字段)以指定找到的集合。 |
System.Collections.Generic.Dictionary<TKey, TValue><string, object> | updateValues | 要被更新的值,Key表示列名,值是要被更新的值。 |
下面的代码示例根据POST方法请求的内容更新Forguncy表中的特定记录。
public class SampleApi : ForguncyApi
{
[Post]
public void UpdateDataSample()
{
StreamReader reader = new StreamReader(this.Context.Request.Body);
string message = reader.ReadToEnd();
UpdateObj updateData = JsonConvert.DeserializeObject<UpdateObj>(message);
var targetRecord = new ColumnValuePair() { ColumnName = "ID", Value = updateData.ID };
this.DataAccess.UpdateTableData("SampleTable1", targetRecord, updateData.UpdateData);
}
}
更新与指定值匹配的记录。
Task UpdateTableDataAsync(string tableName, ColumnValuePair primaryKey, Dictionary<string, object> updateValues)
类型 | 名称 | 描述 |
---|---|---|
string | tableName | 更新目标表名称。 |
ColumnValuePair | primaryKey | 字段名称/值对(使用唯一字段)以指定找到的集合。 |
System.Collections.Generic.Dictionary<TKey, TValue><string, object> | updateValues | 要被更新的值,Key表示列名,值是要被更新的值。 |
类型 | 描述 |
---|---|
System.Threading.Tasks.Task |
下面的代码示例根据POST方法请求的内容更新Forguncy表中的特定记录。
public class SampleApi : ForguncyApi
{
[Post]
public async Task UpdateDataSample()
{
StreamReader reader = new StreamReader(this.Context.Request.Body);
string message = reader.ReadToEnd();
UpdateObj updateData = JsonConvert.DeserializeObject<UpdateObj>(message);
var targetRecord = new ColumnValuePair() { ColumnName = "ID", Value = updateData.ID };
await this.DataAccess.UpdateTableDataAsync("SampleTable1", targetRecord, updateData.UpdateData);
}
}