ADO. NET + T- SQL Вызвать скалярную функцию из другого БД? - PullRequest
0 голосов
/ 08 мая 2020

У меня есть SQL сценарий select [master].[dbo].sp_SearchDuplicatedAddress('','','',''), который я могу успешно запустить из студии управления. Функция sp_SearchDuplicatedAddress существует в базе данных master и доступна зарегистрированному пользователю, здесь нет проблем. Проблема возникает, когда я пытаюсь выполнить этот SQL сценарий из ADO. Net Я получаю следующую ошибку:

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?

1 Ответ

0 голосов
/ 08 мая 2020

Репродукции у меня нет. Можете ли вы изменить приведенное ниже, чтобы воспроизвести поведение?

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);

            }

        }
    }

}
...