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