Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何允许SQL数据库中的空值在WPF DataGrid控件中显示为空字符串(使用WCF服务)?_C#_Sql Server_Wpf_Wcf - Fatal编程技术网

C# 如何允许SQL数据库中的空值在WPF DataGrid控件中显示为空字符串(使用WCF服务)?

C# 如何允许SQL数据库中的空值在WPF DataGrid控件中显示为空字符串(使用WCF服务)?,c#,sql-server,wpf,wcf,C#,Sql Server,Wpf,Wcf,我正在练习使用Northwind数据库,我创建了一个服务,允许我从employees表浏览Northwind员工。接口的代码为: [ServiceContract] public interface IEmployeesService { [OperationContract] List<EmployeesCon> FetchEmployees(); } [DataContract] public class EmployeesCon { [DataMem

我正在练习使用Northwind数据库,我创建了一个服务,允许我从employees表浏览Northwind员工。接口的代码为:

[ServiceContract]
public interface IEmployeesService
{
    [OperationContract]
    List<EmployeesCon> FetchEmployees();

}

[DataContract]
public class EmployeesCon
{
    [DataMember]
    public int EmployeeID { get; set; }
    [DataMember]
    public string LastName { get; set; }
    [DataMember]
    public string FirstName { get; set; }
    [DataMember]
    public string Title { get; set; }
    [DataMember]
    public string Address { get; set; }
    [DataMember]
    public string City { get; set; }
    [DataMember]
    public string PostalCode { get; set; }
    [DataMember]
    public string HomePhone { get; set; }
}
[服务合同]
公共接口IEmployeesService
{
[经营合同]
列出雇员();
}
[数据合同]
公营雇员协会
{
[数据成员]
public int EmployeeID{get;set;}
[数据成员]
公共字符串LastName{get;set;}
[数据成员]
公共字符串名{get;set;}
[数据成员]
公共字符串标题{get;set;}
[数据成员]
公共字符串地址{get;set;}
[数据成员]
公共字符串City{get;set;}
[数据成员]
公共字符串PostalCode{get;set;}
[数据成员]
公共字符串家庭电话{get;set;}
}
我没有包括数据库中的所有属性,只是其中的一些

服务类中的代码是:

public class EmployeesService : IEmployeesService
{
    private string cnnNorthwind = Properties.Settings.Default.NORTHWNDConnectionString;

    public List<EmployeesCon> FetchEmployees()
    {
        SqlConnection con = new SqlConnection(cnnNorthwind);

        SqlCommand command = new SqlCommand("SELECT EmployeeID, LastName, FirstName, Title, Address, City, PostalCode, HomePhone FROM Employees", con);

        try
        {
            con.Open();
            SqlDataReader dr = command.ExecuteReader();
            List<EmployeesCon> employeesList = new List<EmployeesCon>();

            while (dr.Read())
            {
                EmployeesCon z1 = new EmployeesCon();
                z1.EmployeeID = dr.GetInt32(0);
                z1.LastName = dr.GetString(1);
                z1.FirstName = dr.GetString(2);
                z1.Title = dr.GetString(3);
                z1.Address = dr.GetString(4);
                z1.City = dr.GetString(5);
                z1.PostalCode = dr.GetString(6);
                z1.HomePhone = dr.GetString(7);

                employeesList.Add(z1);
            }
            return employeesList;
        }

        catch (Exception)
        {
            return null;
        }

        finally
        {
            con.Close();
        }
    }
}
公共类EmployeesService:IEEmployeesService
{
私有字符串cnnNorthwind=Properties.Settings.Default.NORTHWNDConnectionString;
公共雇员名单()
{
SqlConnection con=新的SqlConnection(cnnNorthwind);
SqlCommand=newsqlcommand(“选择员工ID、姓氏、姓氏、头衔、地址、城市、邮政编码、来自员工的家庭电话”,con);
尝试
{
con.Open();
SqlDataReader dr=command.ExecuteReader();
List employeesList=新列表();
while(dr.Read())
{
EmployeesCon z1=新员工scon();
z1.EmployeeID=dr.GetInt32(0);
z1.LastName=dr.GetString(1);
z1.FirstName=dr.GetString(2);
z1.Title=dr.GetString(3);
z1.Address=dr.GetString(4);
z1.City=dr.GetString(5);
z1.PostalCode=dr.GetString(6);
z1.HomePhone=dr.GetString(7);
新增员工名单(z1);
}
返回员工名单;
}
捕获(例外)
{
返回null;
}
最后
{
con.Close();
}
}
}
在所有这些之后,我创建了一个WPF项目,作为一个带有datagrid的服务客户机,向我显示员工的信息

问题是,SQL Employees表中的某些字段为空(并且允许为空)。当我启动服务WCF测试客户端时,它给我空值(来自异常)

有谁能帮助我调整代码,以便将数据库字段中的空值包括在内并表示为空字符串,以便代码可以工作


提前感谢。

在作业中,如果值为空,您可以使用r(??)提供默认值

z1.Title = dr.GetString(3) ?? string.Empty;

它并没有解决这个问题,因为我仍然无法从数据库的字段中获取空值。它每次都抛出异常。但我试图在其他帖子中找到解决方案,对我有效的代码是z1.Title=(dr.IsDBNull(3))?“”:dr.GetString(3);