从数据库读取时检索 class 属性
Retrieving class property when reading from database
我有以下内容:
using (SqlCommand cmd2 = new SqlCommand("", dbCon))
{
cmd2.CommandText = @"
SELECT [PCMF04_PCBPocketName_N]
,[PCMF01_PcbConnectorName_N]
,[PCMF03_PCBHeaderName_N]
,[PCMF04_KeyIndex_C]
,[PCMF04_SortOrder_R]
FROM [ArdSqlDev].[dbo].[WPCMF04_PCBPocket]
WHERE
PCMF03_PCBHeaderName_N = @PCMF03_PCBHeaderName_N
Order By
PCMF04_PCBPocketName_N";
cmd2.Parameters.Add("@PCMF03_PCBHeaderName_N", SqlDbType.NVarChar).Value = header.HeaderName;
using (SqlDataReader dr = cmd2.ExecuteReader())
{
while (dr.Read())
{
var pocket = new PcbPocket(dr.GetString(0));
pocket.PocketName = dr.GetString(0);
pocket.PcbConnector.ConnectorName = dr.GetString(1);
pocket.KeyIndex = dr.GetString(3);
pocket.SortOrder = dr.GetInt32(4);
header._PcbHeaderPockets.Add(pocket);
}
return header;
}
}
我在线上遇到错误:
pocket.PcbConnector.ConnectorName = dr.GetString(1);
错误:
Error 2 Property or indexer 'PcbConnector.ConnectorName' cannot be assigned to -- it is read only
口袋Class
public partial class PcbPocket : IEquatable<PcbPocket>, IComparable<PcbPocket>, IComparable
{
public PcbPocket(string PocketName)
{
_PocketName = PocketName;
}
private string _PocketName = string.Empty;
public string PocketName
{
get { return _PocketName; }
set { _PocketName = value; }
}
private string _KeyIndex = string.Empty;
public string KeyIndex
{
get { return _KeyIndex; }
set { _KeyIndex = value; }
}
private int _SortOrder = 0;
public int SortOrder
{
get { return _SortOrder; }
set { _SortOrder = value; }
}
private PcbConnector _PcbConnector = null;
public PcbConnector PcbConnector
{
get { return _PcbConnector; }
set { _PcbConnector = value; }
}
连接器Class
public 部分 class PcbConnector:IEquatable、IComparable、IComparable
{
private Collections.PcbConnectorPinList _PcbConnectorPins = new Collections.PcbConnectorPinList();
public Collections.PcbConnectorPinList PcbConnectorPins
{
get
{
return _PcbConnectorPins;
}
set
{
_PcbConnectorPins = value;
}
}
public PcbConnector(string connectorName)
{
_ConnectorName = connectorName;
}
public PcbConnector(PcbConnector pcbConnector)
{
_ConnectorName = pcbConnector.ConnectorName;
_Height = pcbConnector.Height;
_Width = pcbConnector.Width;
_Active = pcbConnector.Active;
_Supplier = pcbConnector.Supplier;
}
private string _ConnectorName = string.Empty;
public string ConnectorName
{
get { return _ConnectorName; }
}
private string _Supplier = string.Empty;
public string Supplier
{
get { return _Supplier; }
set { _Supplier = value; }
}
private float _Height = 0;
public float Height
{
get { return _Height; }
set { _Height = value; }
}
private float _Width = 0;
public float Width
{
get { return _Width; }
set { _Width = value; }
}
private bool _Active = true;
public bool Active
{
get { return _Active; }
set { _Active = value; }
}
PcbPocket 和 PbcConnector 是 classes。 ConnectorName 是 PbcConnector class 的 属性。如果我忽略这一行,该值将为空,这不是保存在数据库中的内容,并且会给我一个对象引用未设置错误。有没有一种方法可以检索我的 ConnectorName 值以显示在我的数据网格视图中(在不同的 file/form 中)?
看看PcbConnector
class。改成这样
class PcbConnector
{
// Now
public string ConnectorName {get; private set;}
// Update this to
public string ConnectorName {get; set;} // makes the set public
}
您的 PcbConnector 上没有 setter:
private string _ConnectorName = string.Empty;
public string ConnectorName
{
get { return _ConnectorName; }
}
你想要:
private string _ConnectorName = string.Empty;
public string ConnectorName
{
get { return _ConnectorName; }
set { _ConnectorName = value; }
}
话虽如此,您应该注意属性可以自动实现,如果您不关心它们的默认值的话。例如,您有:
private int _SortOrder = 0;
public int SortOrder
{
get { return _SortOrder; }
set { _SortOrder = value; }
}
这与
相同
public int SortOrder { get; set; }
作为 int
的默认值无论如何都是 0
我有以下内容:
using (SqlCommand cmd2 = new SqlCommand("", dbCon))
{
cmd2.CommandText = @"
SELECT [PCMF04_PCBPocketName_N]
,[PCMF01_PcbConnectorName_N]
,[PCMF03_PCBHeaderName_N]
,[PCMF04_KeyIndex_C]
,[PCMF04_SortOrder_R]
FROM [ArdSqlDev].[dbo].[WPCMF04_PCBPocket]
WHERE
PCMF03_PCBHeaderName_N = @PCMF03_PCBHeaderName_N
Order By
PCMF04_PCBPocketName_N";
cmd2.Parameters.Add("@PCMF03_PCBHeaderName_N", SqlDbType.NVarChar).Value = header.HeaderName;
using (SqlDataReader dr = cmd2.ExecuteReader())
{
while (dr.Read())
{
var pocket = new PcbPocket(dr.GetString(0));
pocket.PocketName = dr.GetString(0);
pocket.PcbConnector.ConnectorName = dr.GetString(1);
pocket.KeyIndex = dr.GetString(3);
pocket.SortOrder = dr.GetInt32(4);
header._PcbHeaderPockets.Add(pocket);
}
return header;
}
}
我在线上遇到错误:
pocket.PcbConnector.ConnectorName = dr.GetString(1);
错误:
Error 2 Property or indexer 'PcbConnector.ConnectorName' cannot be assigned to -- it is read only
口袋Class
public partial class PcbPocket : IEquatable<PcbPocket>, IComparable<PcbPocket>, IComparable
{
public PcbPocket(string PocketName)
{
_PocketName = PocketName;
}
private string _PocketName = string.Empty;
public string PocketName
{
get { return _PocketName; }
set { _PocketName = value; }
}
private string _KeyIndex = string.Empty;
public string KeyIndex
{
get { return _KeyIndex; }
set { _KeyIndex = value; }
}
private int _SortOrder = 0;
public int SortOrder
{
get { return _SortOrder; }
set { _SortOrder = value; }
}
private PcbConnector _PcbConnector = null;
public PcbConnector PcbConnector
{
get { return _PcbConnector; }
set { _PcbConnector = value; }
}
连接器Class
public 部分 class PcbConnector:IEquatable、IComparable、IComparable {
private Collections.PcbConnectorPinList _PcbConnectorPins = new Collections.PcbConnectorPinList();
public Collections.PcbConnectorPinList PcbConnectorPins
{
get
{
return _PcbConnectorPins;
}
set
{
_PcbConnectorPins = value;
}
}
public PcbConnector(string connectorName)
{
_ConnectorName = connectorName;
}
public PcbConnector(PcbConnector pcbConnector)
{
_ConnectorName = pcbConnector.ConnectorName;
_Height = pcbConnector.Height;
_Width = pcbConnector.Width;
_Active = pcbConnector.Active;
_Supplier = pcbConnector.Supplier;
}
private string _ConnectorName = string.Empty;
public string ConnectorName
{
get { return _ConnectorName; }
}
private string _Supplier = string.Empty;
public string Supplier
{
get { return _Supplier; }
set { _Supplier = value; }
}
private float _Height = 0;
public float Height
{
get { return _Height; }
set { _Height = value; }
}
private float _Width = 0;
public float Width
{
get { return _Width; }
set { _Width = value; }
}
private bool _Active = true;
public bool Active
{
get { return _Active; }
set { _Active = value; }
}
PcbPocket 和 PbcConnector 是 classes。 ConnectorName 是 PbcConnector class 的 属性。如果我忽略这一行,该值将为空,这不是保存在数据库中的内容,并且会给我一个对象引用未设置错误。有没有一种方法可以检索我的 ConnectorName 值以显示在我的数据网格视图中(在不同的 file/form 中)?
看看PcbConnector
class。改成这样
class PcbConnector
{
// Now
public string ConnectorName {get; private set;}
// Update this to
public string ConnectorName {get; set;} // makes the set public
}
您的 PcbConnector 上没有 setter:
private string _ConnectorName = string.Empty;
public string ConnectorName
{
get { return _ConnectorName; }
}
你想要:
private string _ConnectorName = string.Empty;
public string ConnectorName
{
get { return _ConnectorName; }
set { _ConnectorName = value; }
}
话虽如此,您应该注意属性可以自动实现,如果您不关心它们的默认值的话。例如,您有:
private int _SortOrder = 0;
public int SortOrder
{
get { return _SortOrder; }
set { _SortOrder = value; }
}
这与
相同public int SortOrder { get; set; }
作为 int
的默认值无论如何都是 0