vaibhav1800 Ответов: 1

Возврат строки из скалярной функции через C#


Привет Ребята,

У меня есть таблица под названием Employees, содержащая два столбца FirstName и LastName.
Я создал функцию, которая принимает имя и фамилию и возвращает полное имя.
Он хорошо работает, когда выполняется из бэкэнда.

Теперь я делал консольное приложение на C#, которое делает то же самое, но не работает.

Я добавляю детали ниже.

----------------Табличный скрипт для заполнения данных ------------

CREATE TABLE Employee
(
 EmpID int PRIMARY KEY,
 FirstName varchar(50) NULL,
 LastName varchar(50) NULL,
 Salary int NULL,
 Address varchar(100) NULL,
)
--Insert Data
Insert into Employee(EmpID,FirstName,LastName,Salary,Address) Values(1,'Mohan','Chauahn',22000,'Delhi');
Insert into Employee(EmpID,FirstName,LastName,Salary,Address) Values(2,'Asif','Khan',15000,'Delhi');
Insert into Employee(EmpID,FirstName,LastName,Salary,Address) Values(3,'Bhuvnesh','Shakya',19000,'Noida');
Insert into Employee(EmpID,FirstName,LastName,Salary,Address) Values(4,'Deepak','Kumar',19000,'Noida');



---------------Function --------------

<pre>Alter function fngetFullName
(
@FirstName varchar(50),
@LastName varchar(50)
)
returns varchar(101)
as
begin 
DECLARE @Result VARCHAR(50);	
SELECT @Result= (Select @FirstName + ' '+@LastName)
Return @Result
end


----------------Вызываю то же самое из бэкенда---------

Select dbo.fngetFullName(FirstName,LastName) as Name,Salary from Employee


-------------------Код C# -----------------------

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class Program
    {
        private static string FullName;

        public object ConfigurationManager { get; private set; }

        static void Main(string[] args)
        {
            string FullName = GetLookupCodeFromShortCode("FirstName", "LastName");
            Console.WriteLine("Full Name is", FullName);
            Console.ReadKey();
        }

        public static string GetLookupCodeFromShortCode(string Fname, string LName)
        {
            using (var conn = new SqlConnection(@"Data Source=\VAIBHAVLOCAL;Initial Catalog=Dummy ; Integrated Security=SSPI"))
            {
                using (var cmd = new SqlCommand("dbo.fngetFullName(@FirstName,@LastName)", conn))
                {
                    cmd.CommandTimeout = 30;

                    cmd.Parameters.Add("@FirstName", SqlDbType.VarChar);
                    cmd.Parameters.Add("@LastName", SqlDbType.VarChar);
                    cmd.Parameters["@FirstName"].Value = Fname;
                    cmd.Parameters["@LastName"].Value = LName;

                    conn.Open();

                    string getValue = cmd.ExecuteScalar().ToString();
                    if (getValue != null)
                    {
                        FullName = getValue.ToString();
                    }
                    conn.Close();
                    return FullName;
                }
            }

        }
    }
}


Что я уже пробовал:

Попробовал погуглить но ничего не вышло так здорово

1 Ответов

Рейтинг:
7

OriginalGriff

Вы не можете просто выполнить функцию, вы должны инкапсулировать ее в допустимую команду SQL:

string FullName;
using (var conn = new SqlConnection(strConnect))
    {
    conn.Open();
    using (var cmd = new SqlCommand("SELECT dbo.fngetFullName(@FirstName,@LastName)", conn))
        {
        cmd.Parameters.AddWithValue("@FirstName", Fname);
        cmd.Parameters.AddWithValue("@LastName", LName);
        FullName = cmd.ExecuteScalar().ToString();
        }
    }


vaibhav1800

Это правда ! Спасибо

OriginalGriff

Всегда пожалуйста!