[]
        
(Showing Draft Content)

GrapeCity.Forguncy.ServerApi.IDataAccess

接口 IDataAccess

提供访问Forguncy表的方法。

命名空间: GrapeCity.Forguncy.ServerApi
程序集: GrapeCity.Forguncy.ServerApi.dll
语法
public interface IDataAccess

方法

AddTableData(string, Dictionary<string, object>)

将数据添加到指定的表。

声明
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);
    }
}

AddTableDataAsync(string, Dictionary<string, object>)

将数据添加到指定的表。

声明
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);
    }
}

BeginTransactionAsync(string, IsolationLevel)

开启事务

声明
Task BeginTransactionAsync(string connectionStr, IsolationLevel isolationLevel)
参数
类型 名称 描述
string connectionStr

连接字符串,如果传 null 则表示内建库

System.Data.IsolationLevel isolationLevel

隔离级别

返回值
类型 描述
System.Threading.Tasks.Task

BeginTransactionAsync(string)

开启事务

声明
Task BeginTransactionAsync(string connectionStr)
参数
类型 名称 描述
string connectionStr

连接字符串,如果传 null 则表示内建库

返回值
类型 描述
System.Threading.Tasks.Task

CommitTransactionAsync(string)

提交事务

声明
Task CommitTransactionAsync(string connectionStr)
参数
类型 名称 描述
string connectionStr

连接字符串,如果传 null 则表示内建库

返回值
类型 描述
System.Threading.Tasks.Task

DeleteTableData(string, ColumnValuePair)

从表中删除与指定值匹配的记录。

声明
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);
    }
}

DeleteTableDataAsync(string, ColumnValuePair)

从表中删除与指定值匹配的记录。

声明
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);
    }
}

ExecuteSqlAsync(string, string, IDictionary<string, object>, int)

在指定数据库中执行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&lt;string, object&gt;
        {
            { "id", 123 }
        };
        var timeout = 1000; // means 1 second
        var result = await this.DataAccess.ExecuteSqlAsync(connectionStringId, sqlStatement, parameters, timeout);

        var ans = new List&lt;Dictionary&lt;string, object&gt;&gt;();
        if (result is DataTable datatable)
        {
            if (datatable.Rows.Count > 0)
            {
                foreach (DataRow row in datatable.Rows)
                {
                    var cur = new Dictionary&lt;string, object&gt;();
                    foreach (DataColumn column in datatable.Columns)
                    {
                        cur.Add(column.ColumnName, row[column.ColumnName]);
                    }
                    ans.Add(cur);
                }
            }
        }
    }
}

GenerateSqlCondition(Dictionary<string, object>, string)

生成SQL条件

声明
object GenerateSqlCondition(Dictionary<string, object> queryInfos, string tableName)
参数
类型 名称 描述
System.Collections.Generic.Dictionary<TKey, TValue><string, object> queryInfos
string tableName
返回值
类型 描述
object

GetConnectionString(string)

根据活字格中的表名获取连接字符串

声明
string GetConnectionString(string tableName)
参数
类型 名称 描述
string tableName

活字格中的表名

返回值
类型 描述
string

数据库连接字符串

备注

如果指定表为内建表,返回的连接字符为空

异常
类型 条件
System.ArgumentException

找不到指定表时引发该异常

GetConnectionStringByID(string)

通过数据库连接名称获取连接字符串

声明
string GetConnectionStringByID(string connectionStringID)
参数
类型 名称 描述
string connectionStringID

数据库连接名称

返回值
类型 描述
string

数据库连接字符串

备注

如果指定的数据库连接名称不存在,返回null

GetTableData(string, ColumnValuePair)

从表中获取与指定值匹配的记录。

声明
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));
        }
    }
}

GetTableData(string)

通过指定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));
        }
    }
}

GetTableDataAsync(string, ColumnValuePair)

从表中获取与指定值匹配的记录。

声明
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));
        }
    }
}

GetTableDataAsync(string)

通过指定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));
        }
    }
}

ModifyTablesData(Dictionary<string, ModifyData>)

根据多个已编辑的数据更新(添加/编辑/删除)数据。

声明
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);
    }
}

ModifyTablesDataAsync(Dictionary<string, ModifyData>)

根据多个已编辑的数据更新(添加/编辑/删除)数据。

声明
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);
    }
}

RollbackTransactionAsync(string)

回滚事务

声明
Task RollbackTransactionAsync(string connectionStr)
参数
类型 名称 描述
string connectionStr

连接字符串,如果传 null 则表示内建库

返回值
类型 描述
System.Threading.Tasks.Task

UpdateTableData(string, ColumnValuePair, Dictionary<string, object>)

更新与指定值匹配的记录。

声明
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);
    }
}

UpdateTableDataAsync(string, ColumnValuePair, Dictionary<string, object>)

更新与指定值匹配的记录。

声明
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);
    }
}