gpt4 book ai didi

c# - 在 C# 中读取数据库时检查列是否存在

转载 作者:行者123 更新时间:2023-11-29 05:52:09 25 4
gpt4 key购买 nike

在我的数据库中,我为对象创建了两个不同的表,比如说 OBJECT 和 ORIGINAL_OBJECT(在法语中,例如 Repere),它们之间的唯一区别是 ORIGINAL_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_ORIGINAL 使用相同的函数。但是当我想读取我的 OBJECT_ORIGINAL 时,我遇到了一个错误,指出该字段不存在(很明显)。

我在其他情况下已经遇到了同样的问题,因为这个函数只有在我使用 SELECT * 时才有效(如果我没有读取所有列,这将返回一个错误)。

直到现在我发现解决它的唯一方法是使用 try/catch(在 catch 中我将应用默认值,例如 ID=-1),但我觉得它是这不是一个非常正确的解决方案,正在寻找另一种方法来做到这一点。

最佳答案

您需要检查 DataReader 中是否存在 MODIFICATIONS 列,因为您在正手上不知道它。

documentation微软的我找到了一个叫做GetSchemaTable的方法.
它会给你一个描述列元数据的数据表。因此,您可以检查该表以查看是否有名称为 MODIFICATIONS 的列。
我会用不同的方法进行检查,这样它就不会使 while 循环中的代码困惑太多。

您可以在 StackOverflow 上查看此问题 Check for column name in a SqlDataReader object这对您的问题有更短的解决方案。
我认为这是一个更好、更简单的解决方案,但在我几乎完成上面的回答后,我找到了它(通过简单的谷歌搜索)。所以这就是为什么我为您提供这两种解决方案(并且还可以帮助您使用我在评论中指出的 MS 文档)

关于c# - 在 C# 中读取数据库时检查列是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53019218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com