[英]C# Doesn't recognize empty cell using SQL,oleDB
当我试图从我的访问表中获取一个值,并且该单元格为空时,我收到此错误:
System.InvalidCastException:指定的强制转换无效。
当我试图从三元组列中获取信息时,它就会发生。它可能在单元格中没有任何值,但必须在triplet1的列中。 这是我写的代码的一部分。
public Codons(string name)
{
this.start = false;
this.end = false;
this.dataconnection = new OleDbConnection();
this.dataconnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
this.dataconnection.Open();
string sql = "SELECT tblCodons.codonsCodon1, tblCodons.codonsCodon3, "+
"tblCodons.codonsTriplet1, tblCodons.codonsTriplet2, tblCodons.codonsTriplet3, "+
"tblCodons.codonsTriplet4, tblCodons.codonsTriplet5, tblCodons.codonsTriplet6, "+
"tblCodons.codonsFullName, tblCodons.codonsStart, tblCodons.codonsEnd"
+" FROM tblCodons"
+" WHERE tblCodons.codonsFullName=?";
OleDbCommand mycomm = new OleDbCommand(sql, dataconnection);
mycomm.Parameters.AddWithValue("codonsFullName", name);
OleDbDataReader dataReader = mycomm.ExecuteReader();
dataReader.Read();
this.codon1 = dataReader.GetString(0);
this.codon3 = dataReader.GetString(1);
this.triplet1 = dataReader.GetString(2);
if (dataReader.GetString(3) == "")
this.triplet2 = " ";
else
this.triplet2 = dataReader.GetString(3);
if (dataReader.GetString(4) == "")
this.triplet3 = " ";
else
this.triplet3 = dataReader.GetString(4);
if (dataReader.GetString(5) == "")
this.triplet4 = " ";
else
this.triplet4 = dataReader.GetString(5);
if (dataReader.GetString(6) == "")
this.triplet5 = " ";
else
this.triplet5 = dataReader.GetString(6);
if (dataReader.GetString(7) == "")
this.triplet6 = " ";
else
this.triplet6 = dataReader.GetString(7);
this.fullName = dataReader.GetString(8);
this.start = dataReader.GetBoolean(9);
this.end = dataReader.GetBoolean(10);
dataReader.Close();
我也尝试过null而不是“”。
TNX的帮助!
将您的字符串属性设置为(dataReader[3] as string) ?? " "
(dataReader[3] as string) ?? " "
。 当数据库字段为null时,类型为DBNull
,其值为DBNull.Value
而不是值为null
类型string
。
您还可以在调用GetString
之前检查使用条件,如dataReader[3] == DBNull.Value
,以检查该字段是否为空。
在您的代码示例中,您要检查此类内容
if (dataReader.GetString(3) == "")
this.triplet2 = " ";
我建议使用== string.empty;
或使用isNullOrEmpty()
方法。 Null和empty之间存在差异
所以你有这个this.triplet2 = dataReader.GetString(3);
尝试像对象一样投射对象
this.triplet2 = (dataReader.GetString(3) as object) ?? DBNull.Value;
DBNull也是您的最佳选择
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.