2014-12-30 2 views
0

Моих проблем: Я пытаюсь следовать этому учебнику о службе ФОС, связанной с формой окон и с использованием базы данных: http://www.c-sharpcorner.com/uploadfile/rohatash/insert-and-display-data-in-datagridview-in-windows-forms-app/интерфейс не может определять типов

Когда я запускаю код, я получаю 2 ошибки о: ' IService1 ': интерфейсы не могут объявлять типы.
'UserDetails': интерфейсы не могут объявлять типы.

Я искал ответы на stackoverflow и google, но единственные вопросы, которые были близки к моему, остались без ответа. Также некоторые комментарии говорят, что это работает для них, так это проблема с кодом или, может быть, с конфигурацией. я поставил код из моих 2 файлов IService.cs и Service.cs здесь: в IService.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.ServiceModel.Web; 
using System.Text; 
using System.Data.SqlClient; 
using System.Data; 

namespace WCFServiceForInsert 
{ 
    // REMARQUE : vous pouvez utiliser la commande Renommer du menu Refactoriser pour changer le nom d'interface "IService" à la fois dans le code et le fichier de configuration. 
    [ServiceContract] 
    public interface IService 
    { 
     // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together. 
     [ServiceContract] 
     public interface IService1 
     { 
      [OperationContract] 
      string InsertUserDetails(UserDetails userInfo); 

      [OperationContract] 
      DataSet SelectUserDetails(); 
     } 

     // Use a data contract as illustrated in the sample below to add composite types to service operations. 
     [DataContract] 
     public class UserDetails 
     { 
      int id; 
      string title; 
      string salary; 
      string benefits; 
      string keywords; 
      string jobType; 
      string location; 
      string startDate; 
      string description; 
      string recruitmentAgency; 
      string agencyContact; 
      string agencyPhone; 
      string agencyEmail; 
      string jobRef; 
      string datePosted; 
      string dateExpire; 

      [DataMember] 
      public int JobID 
      { 
       get { return id; } 
       set { id = value; } 
      } 

      [DataMember] 
      public string Title 
      { 
       get { return title; } 
       set { title = value; } 
      } 
      [DataMember] 
      public string Salary 
      { 
       get { return salary; } 
       set { salary = value; } 
      } 
      [DataMember] 
      public string Benefits 
      { 
       get { return benefits; } 
       set { benefits = value; } 
      } 
      [DataMember] 
      public string Keywords 
      { 
       get { return keywords; } 
       set { keywords = value; } 
      } 
      [DataMember] 
      public string JobType 
      { 
       get { return jobType; } 
       set { jobType = value; } 
      } 
      [DataMember] 
      public string Location 
      { 
       get { return location; } 
       set { location = value; } 
      } 
      [DataMember] 
      public string StartDate 
      { 
       get { return startDate; } 
       set { startDate = value; } 
      } 
      [DataMember] 
      public string Description 
      { 
       get { return description; } 
       set { description = value; } 
      } 
      [DataMember] 
      public string RecruitmentAgency 
      { 
       get { return recruitmentAgency; } 
       set { recruitmentAgency = value; } 
      } 
      [DataMember] 
      public string AgencyContact 
      { 
       get { return agencyContact; } 
       set { agencyContact = value; } 
      } 
      [DataMember] 
      public string AgencyPhone 
      { 
       get { return agencyPhone; } 
       set { agencyPhone = value; } 
      } 
      [DataMember] 
      public string AgencyEmail 
      { 
       get { return agencyEmail; } 
       set { agencyEmail = value; } 
      } 
      [DataMember] 
      public string JobRef 
      { 
       get { return jobRef; } 
       set { jobRef = value; } 
      } 
      [DataMember] 
      public string DatePosted 
      { 
       get { return datePosted; } 
       set { datePosted = value; } 
      } 
      [DataMember] 
      public string DateExpire 
      { 
       get { return dateExpire; } 
       set { dateExpire = value; } 
      } 
     } 
    } 

} 

файл Service.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.ServiceModel.Web; 
using System.Text; 
using System.Data.SqlClient; 
using System.Data; 

namespace WCFServiceForInsert 
{ 
    // REMARQUE : vous pouvez utiliser la commande Renommer du menu Refactoriser pour changer le nom de classe "Service" à la fois dans le code, le fichier svc et le fichier de configuration. 
    public class Service : IService 
    { 
     public DataSet SelectUserDetails() 
     { 
      SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=registration;User ID=sa;Password=wintellect"); 
      con.Open(); 
      SqlCommand cmd = new SqlCommand("Select * from Table", con); 
      SqlDataAdapter sda = new SqlDataAdapter(cmd); 
      DataSet ds = new DataSet(); 
      sda.Fill(ds); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
      return ds; 
     } 

     public string InsertUserDetails(IService.UserDetails userInfo) 
     { 
      string Message; 
      Message = ""; 
      SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=registration;User ID=sa;Password=wintellect"); 
      con.Open(); 
      SqlCommand cmd = new SqlCommand("insert into RegistrationTable(Title,Salary,Benefits,Keywords,JobType,Location,StartDate,Description,RecruitmentAgency,AgencyContact,AgencyPhone,AgencyEmail,JobRef,DatePosted,DateExpire) values(@Title,@Salary,@Benefits,@Keywords,@JobType,@Location,@StartDate,@Description,@RecruitmentAgency,@AgencyContact,@AgencyPhone,@AgencyEmail,@JobRef,@DatePosted,@DateExpire)", con); 
      cmd.Parameters.AddWithValue("@Title", userInfo.Title); 
      cmd.Parameters.AddWithValue("@Salary", userInfo.Salary); 
      cmd.Parameters.AddWithValue("@Benefits", userInfo.Benefits); 
      cmd.Parameters.AddWithValue("@Keywords", userInfo.Keywords); 
      cmd.Parameters.AddWithValue("@JobType", userInfo.JobType); 
      cmd.Parameters.AddWithValue("@Location", userInfo.Location); 
      cmd.Parameters.AddWithValue("@StartDate", userInfo.StartDate); 
      cmd.Parameters.AddWithValue("@Description", userInfo.Description); 
      cmd.Parameters.AddWithValue("@RecruitmentAgency", userInfo.RecruitmentAgency); 
      cmd.Parameters.AddWithValue("@AgencyContact", userInfo.AgencyContact); 
      cmd.Parameters.AddWithValue("@AgencyPhone", userInfo.AgencyPhone); 
      cmd.Parameters.AddWithValue("@AgencyEmail", userInfo.AgencyEmail); 
      cmd.Parameters.AddWithValue("@JobRef", userInfo.JobRef); 
      cmd.Parameters.AddWithValue("@DatePosted", userInfo.DatePosted); 
      cmd.Parameters.AddWithValue("@DateExpire", userInfo.DateExpire); 
      int result = cmd.ExecuteNonQuery(); 
      if (result == 1) 
      { 
       Message = userInfo.Title + " Details inserted successfully"; 
      } 
      else 
      { 
       Message = userInfo.Title + " Details not inserted successfully"; 
      } 
      con.Close(); 
      return Message; 
     } 
    } 
} 
+3

Сообщение об ошибке ясно - вы не можете объявить '' class' в пределах интерфейса ". Переместите объявление 'UserDetails', чтобы быть вне декларации' IService', чтобы исправить это. – MarcinJuraszek

+3

Посмотрите пример кода - он не объявляет никаких типов внутри интерфейсов. По какой-то причине вы обернули 'IService1' и' UserDetails' в интерфейсе, но это не тот же код ... –

+0

Я пробовал решение @ChrisG, дал мне, но он не сработал (он поместил объявление userdetails за пределы из заявления IService, как сказал Марцин Джурашек). У меня все еще есть ошибки. Джон Скит, что вы подразумеваете под «_it не в том же коде»? –

ответ

3

Просто переместите свой класс вне из Определение интерфейса. Кроме того, это лучшая практика не гнездовых интерфейсов (для C#, как правило, рекомендуется использовать 1 класс/интерфейс на файл)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.ServiceModel.Web; 
using System.Text; 
using System.Data.SqlClient; 
using System.Data; 

namespace WCFServiceForInsert 
{ 

// REMARQUE : vous pouvez utiliser la commande Renommer du menu Refactoriser pour changer le nom d'interface "IService" à la fois dans le code et le fichier de configuration. 
// There is not a reason to keep this IService unless it is necessary for some other piece of your code 
[ServiceContract] 
public interface IService 
{ 


} 

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together. 
    [ServiceContract] 
    public interface IService1 
    { 
     [OperationContract] 
     string InsertUserDetails(UserDetails userInfo); 

     [OperationContract] 
     DataSet SelectUserDetails(); 
    } 


    // Use a data contract as illustrated in the sample below to add composite types to service operations. 
    // You must declare this outside of the Interface definition. 
    [DataContract] 
    public class UserDetails 
    { 
     int id; 
     string title; 
     string salary; 
     string benefits; 
     string keywords; 
     string jobType; 
     string location; 
     string startDate; 
     string description; 
     string recruitmentAgency; 
     string agencyContact; 
     string agencyPhone; 
     string agencyEmail; 
     string jobRef; 
     string datePosted; 
     string dateExpire; 

     [DataMember] 
     public int JobID 
     { 
      get { return id; } 
      set { id = value; } 
     } 

     [DataMember] 
     public string Title 
     { 
      get { return title; } 
      set { title = value; } 
     } 
     [DataMember] 
     public string Salary 
     { 
      get { return salary; } 
      set { salary = value; } 
     } 
     [DataMember] 
     public string Benefits 
     { 
      get { return benefits; } 
      set { benefits = value; } 
     } 
     [DataMember] 
     public string Keywords 
     { 
      get { return keywords; } 
      set { keywords = value; } 
     } 
     [DataMember] 
     public string JobType 
     { 
      get { return jobType; } 
      set { jobType = value; } 
     } 
     [DataMember] 
     public string Location 
     { 
      get { return location; } 
      set { location = value; } 
     } 
     [DataMember] 
     public string StartDate 
     { 
      get { return startDate; } 
      set { startDate = value; } 
     } 
     [DataMember] 
     public string Description 
     { 
      get { return description; } 
      set { description = value; } 
     } 
     [DataMember] 
     public string RecruitmentAgency 
     { 
      get { return recruitmentAgency; } 
      set { recruitmentAgency = value; } 
     } 
     [DataMember] 
     public string AgencyContact 
     { 
      get { return agencyContact; } 
      set { agencyContact = value; } 
     } 
     [DataMember] 
     public string AgencyPhone 
     { 
      get { return agencyPhone; } 
      set { agencyPhone = value; } 
     } 
     [DataMember] 
     public string AgencyEmail 
     { 
      get { return agencyEmail; } 
      set { agencyEmail = value; } 
     } 
     [DataMember] 
     public string JobRef 
     { 
      get { return jobRef; } 
      set { jobRef = value; } 
     } 
     [DataMember] 
     public string DatePosted 
     { 
      get { return datePosted; } 
      set { datePosted = value; } 
     } 
     [DataMember] 
     public string DateExpire 
     { 
      get { return dateExpire; } 
      set { dateExpire = value; } 
     } 
    } 


} 
+0

спасибо за ваш ответ! Однако он еще не разрешил ошибки, но у меня все еще есть те же ошибки с ответом –

+0

Хм ... Я скопировал это из собранного тестового стенда. Вы уверены, что они такие же? – ChrisG

+0

На самом деле я забыл одну вещь: Я забыл что-то ... public class Service: IService следует изменить на общедоступный. Сервис: IService1. В противном случае вы получите ошибки интерфейса, которые не были реализованы. – ChrisG

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