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

标签 c# mysql tsql stored-procedures

在 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;

其中输入表定义为:

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

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

最佳答案

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

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

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

关于c# - 如何使用 C# 中的 MySQL 存储过程将表作为存储过程的输入发送?我有 T-SQL 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58262439/

相关文章:

SQL 日期逻辑子句

SQL 连接 : Select status of reviews submitted by employees and also the list of employees who have not submitted the review for each year

c# - specflow如何处理多个参数?

使用另一个表过滤一个表的 SQL 查询

重复模式的 C# 正则表达式

php - PDO MYSQL 不存在创建表,查看是否已创建

php - 给照片添加标签mysql

mysql - Sql:从其他表中选择

c# - 如何在鼠标悬停时突出显示 MahApps.Metro 的图 block ?

c# - 捕获 DLL 崩溃