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

使用ADO.NET调用存储过程时省略架构名失败求助

解决ADO.NET调用存储过程无需指定架构名的问题

问题描述

使用ADO.NET调用SQL Server存储过程时,指定MLUserDB.procedureName可成功执行,但仅写procedureName时提示Could not find stored procedure。已创建对应MLUserDB架构的用户,连接字符串如下:

Data Source=localhost;Initial Catalog=xxx;User ID=MLUserDB;Password=xxxxxxxx;Persist Security Info=True;TrustServerCertificate=True;

解决方法

  • 设置用户默认架构
    登录SQL Server,执行以下SQL语句,将MLUserDB用户的默认架构设为自身对应的架构(需确保架构名与用户名一致):

    ALTER USER MLUserDB WITH DEFAULT_SCHEMA = MLUserDB;
    

    执行后,该用户执行操作时会默认查找MLUserDB架构下的对象,无需手动指定架构名。

  • 在ADO.NET会话中临时设置默认架构
    如果无法修改用户默认架构,可在打开数据库连接后,先执行设置默认架构的语句,再调用存储过程:

    using (SqlConnection conn = new SqlConnection(yourConnectionString))
    {
        conn.Open();
        // 临时指定当前会话的默认架构
        using (SqlCommand schemaCmd = new SqlCommand("SET DEFAULT_SCHEMA MLUserDB", conn))
        {
            schemaCmd.ExecuteNonQuery();
        }
        // 调用存储过程
        using (SqlCommand procCmd = new SqlCommand("procedureName", conn))
        {
            procCmd.CommandType = CommandType.StoredProcedure;
            // 添加参数、执行操作等逻辑
            procCmd.ExecuteNonQuery();
        }
    }
    
  • 验证存储过程的架构归属
    确认目标存储过程确实属于MLUserDB架构,执行以下SQL检查:

    SELECT SCHEMA_NAME(schema_id) AS SchemaName, name AS ProcedureName 
    FROM sys.procedures 
    WHERE name = 'procedureName';
    

    如果查询结果的SchemaName不是MLUserDB,需调整存储过程的架构归属,或修改用户默认架构为存储过程所在的架构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:18:20