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

