C# SQL;如果列已经存在,如何跳过“ALTER TABLE”

C# SQL;如果列已经存在,如何跳过“ALTER TABLE”,c#,mysql,C#,Mysql,所以,我不想改变我的表,如果它已经改变之前。在我的WPF应用程序中,我有一个创建新空表的按钮,然后用另一个按钮修改表,在这个过程中,我向空表添加新列。之后,我将向列插入数据。现在我的问题是,当我再次单击该按钮时,它希望在insert之前再次更改表,但由于列已经存在,因此抛出一个错误 我想要的是在列已经存在时跳过alter表。 这是我的基本代码,只需单击一下即可: public bool updateTable(string tableNamee, string question, string

所以,我不想改变我的表,如果它已经改变之前。在我的WPF应用程序中,我有一个创建新空表的按钮,然后用另一个按钮修改表,在这个过程中,我向空表添加新列。之后,我将向列插入数据。现在我的问题是,当我再次单击该按钮时,它希望在insert之前再次更改表,但由于列已经存在,因此抛出一个错误

我想要的是在列已经存在时跳过alter表。 这是我的基本代码,只需单击一下即可:

 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语法有一个错误 我尝试将代码组合成多种变体,但我看不出语法中有什么问题。有人能帮我吗?

如前所述:先检查是否存在。 如前所述:检查模式,而不是数据

调用如下查询:

显示“tablename”中的列,如“fieldname”; 或者这个:

从信息_schema.COLUMNS中选择*,其中TABLE_schema='tablename'和COLUMN_NAME='fieldname'


然后根据结果调用ALTER TABLE。。。查询与否。

看一看,我建议让您的C应用程序查询信息架构表,以获取表的当前列。然后,只有在列表中没有新列时,才使用ALTERTABLE命令添加新列。可能是SQL Server的@MuhammadHannan的重复项。这是MySql。您不应该检查列数据,而应该检查表结构字符串q=$IF COL_LENGTH'appdb.{tablename}','question'为NULL开始改变表appdb.{tablename}在questionID之后添加question VARCHAR100 not NULL,在question END之后添加Atype VARCHAR20 not NULL;这里可能出了什么问题?再次给出语法错误…不知道。设置一个断点,看看q包含什么。然后将字符串粘贴到您的sql工具或中,查看是否获得更多信息。