如何使用来自 c# 的 MySQL 存储过程将表作为输入发送到存储过程?我有 T-SQL 工作

Posted

技术标签:

【中文标题】如何使用来自 c# 的 MySQL 存储过程将表作为输入发送到存储过程?我有 T-SQL 工作【英文标题】:How do I use a MySQL stored procedure from c# which sends a table as input to the store procedure? I have T-SQL working 【发布时间】:2015-04-14 10:41:24 【问题描述】:

在 Transact-SQL 中,我有存储过程的输入参数

@DataTable InputTabel READONLY,

而“InputTabel”定义为:

CREATE TYPE InputTabel AS TABLE
    (
        ID INT NULL,
        RESULT_INDEX INT NULL
    )

在 C# 端,我使用这段代码来定义参数:

SqlParameter parameter = new SqlParameter( );
parameter.ParameterName = "@DataTable ";
parameter.SqlDbType = System.Data.SqlDbType.Structured;
parameter.TypeName = "InputTabel";
parameter.Value = theInputTable;

InputTable定义为:

DataTable theInputTable = new DataTable("TheInputTableName");
theInputTable.Columns.Add( "ID", typeof( Int32 ) );
theInputTable.Columns.Add( "RESULT_INDEX", typeof( string ) );

我现在必须将这种方法转移到 mysql 和wounder,我该怎么做? 在 C# 端和服务器端。

【问题讨论】:

【参考方案1】:

不幸的是,MySql 没有实现表值参数,但确实存在替代方案:

使用在连接关闭后立即删除的临时表 但对通过此连接的所有查询可见。唯一的缺点是必须在预期查询之前执行额外的查询(或更多),只是为了将数据插入到临时表中。 使用分隔字符串 ("str1,str2,str3") 会显着降低性能,尤其是当字符串很长时。

有关这两种方法的更多信息: Create table variable in MySQL

【讨论】:

以上是关于如何使用来自 c# 的 MySQL 存储过程将表作为输入发送到存储过程?我有 T-SQL 工作的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 和 SQL 将表值参数传递给用户定义的数据表

如何在 c# 实体框架核心中使用 FromSqlRaw() 将 OUTPUT 参数发送到 MySql 存储过程

将表值参数传递给存储过程

使用 PetaPoco 将表值参数传递给存储过程

[mysql-connector-python在将表作为参数传递时,在表名周围添加单引号。表名来自Flask会话变量

mysql 存储过程 动态表名