【发布时间】:2019-08-06 11:57:32
【问题描述】:
所以,如果之前已经更改过的表,我不想更改表。在我的 WPF 应用程序中,我有一个用于创建新空表的按钮,然后我使用另一个按钮更改表,在该过程中,我将新列添加到空表中。之后,我将数据插入到列中。现在我的问题是,当我再次单击该按钮时,它想在插入之前再次更改表,但由于列已经存在而引发错误。
我想要的是在列已经存在时跳过“更改表”。 这是我的基本代码,只需单击一下即可:
public bool updateTable(string tableNamee, string question, string Atype)
{
try
{
string query = $"ALTER TABLE appdb.{tableNamee} ADD question VARCHAR(100) NOT NULL AFTER questionID, ADD Atype VARCHAR(20) NOT NULL AFTER question; ";
string query2 = $"INSERT INTO appdb.{tableNamee} (question, Atype) VALUES('{question}','{Atype}'); ";
etc
这是我尝试过的:
public bool updateTable(string tableNamee, string question, string Atype)
{
try
{
string q = $"IF NOT EXISTS( SELECT NULL FROM appdb.{tableNamee} WHERE table_name = {tableNamee} AND table_schema = appdb " +
$"AND column_name = question, Atype) THEN ALTER TABLE appdb.{tableNamee} ADD question VARCHAR(100) NOT NULL AFTER questionID, ADD Atype VARCHAR(20) NOT NULL AFTER question; END IF; ";
string query2 = $"INSERT INTO appdb.{tableNamee} (question, Atype) VALUES('{question}','{Atype}'); ";
etc
但我收到以下错误:“您的 SQL 语法有错误” 我厌倦了将代码组合成多种变体,但我看不出语法有什么问题。有人可以帮我解决这个问题吗?
【问题讨论】:
-
看看here
-
我建议让您的 C# 应用程序查询信息模式表以获取表的当前列。然后,仅当新列尚未出现在列表中时,才使用
ALTER TABLE命令添加新列。 -
@MuhammadHannan 这是针对 SQL Server 的。这是 MySql。
-
你不应该检查列数据,而是检查表结构