在我的数据库中,我为对象创建了两个不同的表,比如object和original\u object(在法语中,在示例中是restree),它们之间的唯一区别是original\u object没有任何列,我在其中保存所做的修改。
我有一个函数,可以获取所有字段:
public Repere Select_detail_repere(string query)
{
Repere det = null; ;
if (this.OpenConnection() == true)
{
IDataReader dataReader = ExecuteReader(query);
while (dataReader.Read())
{
det = new Repere();
det.Name = (dataReader["DET_NOM"] ?? string.Empty).ToString().Trim();
det.Modifies = dataReader["MODIFICATIONS"].ToString().Trim();
det.Profil = (dataReader["DET_PRF"] ?? string.Empty).ToString().Trim();
det.Matiere = (dataReader["DET_MAT"] ?? string.Empty).ToString().Trim();
det.GroupeProfil = (dataReader["DET_GRP_PRF"] ?? string.Empty).ToString().Trim();
det.Longueur = double.Parse(dataReader["LONGUEUR"].ToString().Trim());
det.Largeur = double.Parse(dataReader["DET_LARGE"].ToString().Trim());
det.Hauteur = double.Parse(dataReader["DET_HAUT"].ToString().Trim());
det.Poids = double.Parse(dataReader["DET_PDS"].ToString().Trim());
det.Angle1 = double.Parse(dataReader["ANG_AME_1"].ToString().Trim());
det.Angle2 = double.Parse(dataReader["ANG_AME_2"].ToString().Trim());
det.AngleAile1 = double.Parse(dataReader["ANG_AILE_1"].ToString().Trim());
det.AngleAile2 = double.Parse(dataReader["ANG_AILE_2"].ToString().Trim());
det.PercageString = (dataReader["PERCAGE"] ?? string.Empty).ToString().Trim();
det.ScribingString = (dataReader["SCRIBING"] ?? string.Empty).ToString().Trim();
det.Mark = (dataReader["MARK"] ?? string.Empty).ToString().Trim();
det.ContInt0 = (dataReader["CONT_INT"] ?? string.Empty).ToString().Trim();
det.ContExt0 = (dataReader["CONT_EXT"] ?? string.Empty).ToString().Trim();
det.Revision = (dataReader["REVISION"] ?? string.Empty).ToString().Trim();
}
this.CloseConnection();
}
return det;
}
我对object和object使用相同的函数。但是当我想读取我的object\u original时,我遇到了一个错误,它说这个字段不存在(很明显)。
我在其他情况下也遇到了同样的问题,因为只有使用 SELECT *
(如果我没有读取所有列,这将返回一个错误)。
到目前为止,我发现解决这个问题的唯一方法是使用try/catch(在catch中我将应用一个默认值, ID=-1
例如),但我觉得这不是一个非常正确的解决方案,正在寻找另一种方法来实现这一点。
4条答案
按热度按时间wr98u20j1#
这个问题可以引用为“重复”,我在堆栈上找到了答案
lpwwtiir2#
这将是有帮助的,因为你使用的查询以及,但我认为你可以使用
IF COL_LENGTH('table_name','column_name') IS NOT NULL
在您的查询中。g6baxovj3#
你需要检查一下
MODIFICATIONS
存在于数据读取器中,因为你不知道它在正手。在微软的文档中,我发现了一个名为
GetSchemaTable
.它将为您提供一个描述列元数据的datatable。所以您可以检查该表以查看是否有名为的列
MODIFICATIONS
.我会把这个检查放在一个不同的方法中,这样就不会把代码弄乱
while
循环那么多。或
您可以在stackoverflow检查sqldatareader对象中的列名时检查这个问题,该对象对您的问题有一个较短的解决方案。
我认为这是一个更好更简单的解决方案,但我发现它(通过一个简单的谷歌搜索)后,我几乎完成了我的答案上面。所以这就是为什么我给你们两个解决方案(同时也帮助你们一点ms文档,我在评论中指出)
pgpifvop4#
您可以使用mysql存储过程并对其进行内部检查。在这里检查一下。检查alter table--mysql之前是否存在列