如何在数据库C#中查找表的主键

Posted

技术标签:

【中文标题】如何在数据库C#中查找表的主键【英文标题】:How to find primary key(s) of the table in database C# 【发布时间】:2013-02-18 04:50:23 【问题描述】:

您好,我正在使用 C# 窗口窗体和 mysql 数据库,我能够连接到数据库、检索数据并将其显示在 DataGridView 中。

现在,如果用户单击 DataGridView 中的一行并按 Delete 按钮,我希望在数据库中删除该选定行。

问题是我需要知道哪些列是主键,以便使用此 SQL 查询将其从数据库中删除:

DELETE FROM(选定的表)WHERE(主列的名称 = 选定行的主键列的值

粗体部分是我卡在的地方,有人可以帮助我或知道如何以其他方式删除数据库中的选定行吗?

【问题讨论】:

检查这个msdn.microsoft.com/en-us/library/…可能会对你有帮助:) @andy 我花了几个小时还看了你给我的东西 - 带有主键属性的数据表,但仍然无法弄清楚。帮帮我! 【参考方案1】:

您可以使用sql查询从表SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'获取主键

【讨论】:

我试图在 mySQL 中执行这个查询,它确实返回了主键列的信息,我想知道它在 C# 中的样子(返回值和返回类型是什么),因为它需要一个变量来存储它以供以后使用。 @RonaldinhoState,查询以表格形式返回数据,您可以从Column_name获取表格中的主键。【参考方案2】:

如果您事先不知道主键列是什么,那么您需要检查表的信息才能找到它。 this question 中的答案应该为您提供有关如何继续使用 MySQL 的线索,使用记录在 here 中的 SHOW INDEX MySQL 调用。

【讨论】:

我试图执行这个查询: SHOW INDEX FROM tableName WHERE Key_name = 'PRIMARY';在 mySQL 中,它确实返回主键列的信息,我想知道它在 C# 中的样子(返回值和返回类型是什么),因为它需要一个变量来存储它以供以后使用。 调用的结果可能是一个文本块,而不是一个记录集。抱歉,我没有要测试的 MySQL 服务器。【参考方案3】:

可以将datagridview中Primary Key的值赋给另一列(隐藏),这样在调用Delete()函数时,就可以得到主键的值:

Int64 iRecordId =0;
int selectedIndex = 0;

if (datagridview1.SelectedRows.Count > 0)

   selectedIndex = datagridview1.SelectedRows[0].Index;
   iRecordId = Convert.toInt64(datagridview1.Rows[selectedIndex].Cells[0].Value.toString());
   // insert delete commands heere

假设第一列是主键。

【讨论】:

你的意思是“假设第一列是主键”,它可能有多个列作为主键或者主键不在第一列,这就是我需要找到它的原因。 @RonaldinhoStatedatagridview1.Rows[selectedIndex].Cells[0].Value.toString()这一行的Cells索引假设主列的索引是第一个。 @RonaldinhoState,他想知道哪一列是主键列。 @GianAcuna 所以如果两列或更多列作为主键也不好,有时用户没有在第一列中定义主键 @andy 我不知道哪一列是主键,因为不同的表有不同的内容(参见图片上我的 GUI)。

以上是关于如何在数据库C#中查找表的主键的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询查找表的主键?

如何在 C# 中获取 Ms Access 表的主键

conn.GetSchema 查找表的主键 - MsAccess

开发技巧-如何获取表记录的主键

在线等!!如何通过主表及其主键查询到与之关联的表及关联字段?数据库为db2

oracle怎么查询所有的表有没有主键