我想用对象填充List。这些对象包含以下格式的信息:
class record
{
//klassen variable
private string voornaam;
private string recordtype;
private decimal gewicht;
private string datum;
public string Voornaam
{
get { return voornaam; }
set { voornaam = value; }
}
public string Recordtype
{
get { return recordtype; }
set { recordtype = value; }
}
public decimal Gewicht
{
get { return gewicht; }
set { gewicht = value; }
}
public string Datum
{
get { return datum; }
set { datum = value; }
}
这些类将填充来自SQL表的信息。我使用此代码获取信息并填写列表:
public List<record> GetAllRecords()
{
List<record> records = new List<record>();
using (SqlConnection Connection = new SqlConnection(@"Data Source =
(LocalDB)\MSSQLLocalDB; AttachDbFilename = " + database + "; Integrated Security = True;"))
{
Connection.Open();
SqlCommand cmd = new SqlCommand(@"SELECT * FROM [records]", Connection);
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
string voornaam = reader.GetString(1);
string oefening = reader.GetString(2);
decimal gewicht = reader.GetDecimal(3); <--this is the problem
string datum = reader.GetString(4);
record Record = new record(voornaam, oefening, gewicht, datum);
records.Add(Record);
}
}
Connection.Close();
return records;
}
}
我这样做是为了在窗体中填充所有类信息的列表框。但是这是不可能的,因为我得到错误:无法将“System.Decimal”类型的对象强制转换为“System.String”类型。
我理解错误,我无法在列表中输入小数,因为它必须是一个字符串。但是我的sql表包含一个小数,我的类也有。所以我不能使用ToString()
或转换它。我应该使用其他方法,如果是这样的话?
答案 0 :(得分:4)
SqlDataReader
的列是从0开始的,而不是从1开始的,因此您应该检索数据,从第0列开始,而不是从第1列开始
string voornaam = reader.GetString(0);
string oefening = reader.GetString(1);
decimal gewicht = reader.GetDecimal(2);
string datum = reader.GetString(3);
错误消息只是说明了以下内容:您收到的是string
列(datum
),但您尝试获取decimal