如何用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
相关产品推荐
相关产品推荐

