ADO.NET + T-SQL从另一个DB调用标量函数?

问题描述 投票:0回答:1

我有一个SQL脚本 select [master].[dbo].sp_SearchDuplicatedAddress('','','','') 我可以从管理工作室成功调用。该函数 sp_SearchDuplicatedAddress 存在于主数据库中,并且可以被登录的用户访问,这里没有问题。问题是当我试图从ADO.Net中执行该SQL脚本时,我得到了以下错误。

System.Data.SqlClient.SqlException: 'Cannot find either column "master" or the user-defined function or aggregate "master.dbo.sp_SearchDuplicatedAddress", or the name is ambiguous.'

这里是示例程序的代码:

    var conn = new SqlConnection();
    var cmd = conn.CreateCommand();
    cmd.CommandText = "select [master].[dbo].sp_SearchDuplicatedAddress('','','','')";
    conn.Open();
    var outt = cmd.ExecuteScalar();
}

有什么办法可以让我从ADO.Net执行跨数据库查询?

c# .net sql-server tsql ado.net
1个回答
0
投票

我没有重现。 你能修改下面的内容来重现这个行为吗?

using Microsoft.Data.SqlClient;
using System;

namespace SqlClientTest
{
    class Program
    {

        static void Main(string[] args)
        {
            var constr = "server=localhost;database=master;integrated security=true";

            using (var conn = new SqlConnection(constr))
            {
                var cmd = conn.CreateCommand();
                cmd.CommandText = @"
create or alter function dbo.sp_SearchDuplicatedAddress ( @a varchar(20),@b varchar(20),@c varchar(20),@d varchar(20) )
returns int
as
begin 
 return 3;
end ";
                conn.Open();
                cmd.ExecuteNonQuery();

            }

            constr = "server=localhost;database=tempdb;integrated security=true";
            using (var conn = new SqlConnection(constr))
            {
                var cmd = conn.CreateCommand();
                cmd.CommandText = "select [master].[dbo].sp_SearchDuplicatedAddress('','','','')";
                conn.Open();
                var outt = cmd.ExecuteScalar();
                Console.WriteLine(outt);

            }

        }
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.