繁体   English   中英

C#无法使用SQL,oleDB识别空单元格

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM