[英]Interface cannot declare types
我的問題:我正在嘗試按照本教程講解與Windows窗體鏈接並使用數據庫的wcf服務: http : //www.c-sharpcorner.com/uploadfile/rohatash/insert-and-display-data-in -datagridview-in-windows-forms-app /
當我運行代碼時,我收到2個有關“ IService1”的錯誤:接口無法聲明類型。
'UserDetails':接口無法聲明類型。
我一直在尋找關於stackoverflow和google的答案,但是唯一與我最接近的問題尚未得到解答。 也有一些評論告訴它對他們有用,所以這是代碼問題還是配置問題。 我將兩個文件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;
}
}
}
只需將您的類移出接口定義即可。 另外,最佳做法是不要嵌套接口(對於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; }
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.