1

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

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

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

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

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

ответ

1

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

1.Use в запросе сделать конкатенацию, а затем использовать его выход в коде

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

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

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 метода являются основным способом их достижения.

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

+0

Я думаю, что это точно то, что я искал. Благодаря тонну! Кажется, работает для меня до сих пор! – JSlam23 2010-12-02 03:09:17

Смежные вопросы