gpt4 book ai didi

c# - 使用 Odbc 连接 (System.Data.Odbc) 在 C# 中获取 MySql 表主键

转载 作者:行者123 更新时间:2023-11-29 05:37:20 24 4
gpt4 key购买 nike

我正在尝试使用 C-Sharp (C#) 检索 MySQL 数据库中表的主键,但遇到了问题。

我查看了提供的各种元数据集合和相应的列,但是它们都没有提供主键。 “表格”和“索引”集合似乎是最有前途的。有趣的是,OdbcConnection.GetSchema() 有一个 PrimaryKey 属性/方法,但是在任何情况下 PrimaryKey 属性都会产生除 null 之外的其他内容。

索引和表确实是显而易见的选择。是的,数据库中的表有一个主键,数据库可以正常工作。

这是一些代码,尽管对于这个问题似乎没有必要。出于本示例的目的,我选择了“表格”,但可以简单地更改为“索引”(或其他任何内容)。显然,表存在 COLUMN_NAME。我只是把它放在那里,玩什么。

public String GetPrimaryKey(String strTable)
{
try
{
String strPrimaryKey = null;
String[] strRestricted = new String[4] { null, null, strTable, null };
DataTable oSchema = null;


// Make sure that there is a connection.
if (ConnectionState.Open != this.m_oConnection.State)
this.m_oConnection.Open();

// DATABASE: Get the schema
oSchema = this.m_oConnection.GetSchema("Tables", strRestricted);

// Extract the information related to the primary column, in the format "{System.Data.DataColumn[0]}"
DataColumn[] oPrimaryKeys = oSchema.PrimaryKey;

// Extract: Column Names
foreach (DataRow oRow in oSchema.Rows)
{
// Get the column name.
String strColumnName = oRow["COLUMN_NAME"].ToString();
}

return strPrimaryKey;
}

catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

return null;
}

在进行研究时,我发现有趣的是我找不到任何使用 GetSchema().PrimaryKey 属性的人的帖子。

那么如何识别主键呢?

提前致谢。

最佳答案

您的评论是神奇的 key 。我不知道旧界面已被弃用。找到正确的代码有点困难,因为遗憾的是在 Indexes 集合上没有“COLUMN_NAME”,在 Columns 集合上没有“PRIMRY”,所以我必须检查两次,但新版本要好得多。

public String GetPrimaryKey(String strTable)
{
try
{
Boolean bIsPrimary = false;
String strIndexName = null;
String strColumnName = null;
String[] strRestricted = new String[4] { null, null, strTable, null };
DataTable oSchemaIndexes = null;
DataTable oSchemaIndexColumns = null;


// Make sure that there is a connection.
if (ConnectionState.Open != this.m_oConnection.State)
this.m_oConnection.Open();

// DATABASE: Get the schemas needed.
oSchemaIndexes = this.m_oConnection.GetSchema("Indexes", strRestricted);
oSchemaIndexColumns = this.m_oConnection.GetSchema("IndexColumns", strRestricted);

// Get the index name for the primary key.
foreach (DataRow oRow in oSchemaIndexes.Rows)
{
// If we have a primary key, then we found what we want.
strIndexName = oRow["INDEX_NAME"].ToString();
bIsPrimary = (Boolean)oRow["PRIMARY"];
if (true == bIsPrimary)
break;
}

// If no primary index, bail.
if (false == bIsPrimary)
return null;

// Get the corresponding column name.
foreach (DataRow oRow in oSchemaIndexColumns.Rows)
{
// Get the column name.
if (strIndexName == (String)oRow["INDEX_NAME"])
{
strColumnName = (String)oRow["COLUMN_NAME"];
break;
}
}

return strColumnName;
}

catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

return null;
}

关于c# - 使用 Odbc 连接 (System.Data.Odbc) 在 C# 中获取 MySql 表主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9636864/

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