Получить одно значение из базы данных, так же, как DLookup () в MS Access - PullRequest
1 голос
/ 01 декабря 2010

Я изучаю Silverlight (C #) и SQLServer в качестве следующей эволюции для нашей текущей (медленной) базы данных Access.До сих пор все было отлично, используя DomainServices для получения нужных мне данных.В нашей базе данных у нас есть таблица (Supervisors) с Supervisor_ID, Supervisor_FirstName, Supervisor_LastName и многими другими полями.

Что я хочу сделать, так это воссоздать функцию, которую я использую в моей текущей базе данных, под названием EntityNameFirstLast (EntityID), которая будетцелое числоЗатем я мог бы получить значение [Supervisor_FirstName] из таблицы [Supervisors], где [Supervisor_ID] == EntityID, используя следующее: FirstName = DLookup ("[Supervisor_FirstName]", "Supervisors", "[Supervisor_ID] = EntityID

Я бы сделал то же самое для фамилии и соединил бы строки, возвращающие одну строку с именем и фамилией.

Как я могу получить только одно значение из моей базы данных через мой DomainService (или любым другим способом в этом отношении)«Я понимаю, что IQueryable GetSupervisorByID (Int SupID) будет возвращать всю нужную мне строку, но как мне получить определенное поле из этой строки?

Я также знаю, что могу установить DomainDataSource в своем XAMLи затем связать с данными, которые я хочу, но мне любопытно, выполнимо ли то, что я спросил выше, или нет.

1 Ответ

1 голос
/ 01 декабря 2010

Есть несколько способов выполнить ваше требование, если вам нужно одно значение с сервера MS-SQL:

1. Используйте запрос для объединения, а затем используйте его вывод в вашем коде.

Select Supervisor_FirstName + ' ' + Supervisor_LastName as Supervisor_FullName From Supervisors Where Supervisor_ID = EntityID

Теперь вы можете получить вышеуказанный запрос для выполнения через SqlCommand и получить интересующую вас часть.

private string GetSupervisorFullName(string entityID, string connectionString) {
    string query = "Select Supervisor_FirstName + ' ' + Supervisor_LastName as Supervisor_FullName From Supervisors Where Supervisor_ID = @EntityID";
    string supervisorFullname = "";

    using(SqlConnection con = new SqlConnection(connectionString)) {
        SqlCommand cmdSupervisorFullname = new SqlCommand();
        cmdSupervisorFullname.Connection = con;
        cmdSupervisorFullname.CommandText = query;
        cmdSupervisorFullname.CommandType = CommandType.Text;

        SqlParameter paraEntityID = new SqlParameter();
        paraEntityID.ParameterName = "@EntityID";
        paraEntityID.SqlDbType = SqlDbType.NVarChar;
        paraEntityID.Direction = ParameterDirection.Input;
        paraEntityID.Value = entityID;

        cmdSupervisorFullname.Parameters.Add(paraEntityID);

        try {
            con.Open();
            supervisorFullname = (String) cmdSupervisorFullname.ExecuteScalar();
        } catch(Exception ex) {
            Console.WriteLine(ex.Message);
        }

        return supervisorFullname;
    }
}

2. Второй способ - создать скалярную функцию вSQL для вашего требования, а затем получите доступ к этой функции, используя метод того же типа, что и упомянутый выше.

Тогда, наконец, вы возьмете возвращаемое значение из вашего метода GetSupervisorFullName и заполните любое контрольное значение по вашему выбору.

Обратите внимание, что есть и другие способы сделать то же самое с LINQtoSQL или с любыми другими инструментами ORM.Приведенные выше 2 метода являются основным способом их выполнения.

Надеюсь, что это поможет.

...