You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Dapper实现C#连接Snowflake?调用存储过程报错排查

解决Dapper调用Snowflake存储过程报“Feature not supported”的问题

问题原因

Snowflake的.NET驱动不支持通过CommandType.StoredProcedure的方式调用存储过程,必须将CALL语句作为普通文本命令执行。这就是为什么直接用ADO.NET执行CALL语句正常,但Dapper指定CommandType.StoredProcedure会触发错误的核心原因。

解决方案

修改代码,将命令类型改为CommandType.Text,直接执行CALL语句:

public async Task<IEnumerable<TestClass>> GetTestData()
{
    using (IDbConnection dbConnection = this.databaseConnection.GetSnowConnection())
    {
        try
        {
            // 改用CommandType.Text执行CALL语句
            var result = await dbConnection.QueryAsync<TestClass>(
                "CALL TESTSP1", 
                commandType: CommandType.Text, 
                commandTimeout: 0);
            return result;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

补充说明

如果存储过程需要传递参数,直接在CALL语句中使用Dapper的参数化语法即可,示例如下:

var parameters = new { Param1 = "value1", Param2 = 123 };
var result = await dbConnection.QueryAsync<TestClass>(
    "CALL TESTSP2(@Param1, @Param2)", 
    parameters, 
    commandType: CommandType.Text);

内容的提问来源于stack exchange,提问作者Abhishek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:43:19