C# 如何将mysql查询转换为可接受的c字符串?

C# 如何将mysql查询转换为可接受的c字符串?,c#,mysql,.net,winforms,C#,Mysql,.net,Winforms,如果列不存在,我将使用mysql动态创建列。。我得到了在mysql控制台中工作的代码,但是当涉及到c时,在命令执行过程中遇到了致命的问题 SET @preparedStatement = (SELECT IF( (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tableName' AND table_schema = DATABASE() AND column_name =

如果列不存在,我将使用mysql动态创建列。。我得到了在mysql控制台中工作的代码,但是当涉及到c时,在命令执行过程中遇到了致命的问题

SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*)
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE  table_name = 'tableName'
    AND table_schema = DATABASE()
    AND column_name = 'colName'
) > 0,
"SELECT 1",
"ALTER TABLE `tableName` ADD `colName` TINYINT(1) NULL DEFAULT '0';"
));

PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
上面的代码我转换成c字符串作为

string qry = "SET @preparedStatement = ( SELECT IF( (SELECT count(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'attendance' AND TABLE_NAME = '" + tname + "' AND COLUMN_NAME = '" + code + "_C' ) > 0, \"SELECT 1', \"ALTER TABLE " + tname + " ADD " + code + "_C int(3) NOT NULL default '0'; \" )); PREPARE alterIfNotExists FROM @preparedStatement; EXECUTE alterIfNotExists; DEALLOCATE PREPARE alterIfNotExists;";
错误是什么

执行代码:

    private void columnCreate_Load(object sender, EventArgs e)
    {
        string tname = "bca_i"; //for temprory
        string code = "BCAXX";//for temprory
        string qry = @"SET @preparedStatement = ( SELECT IF( (SELECT count(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'attendance' AND TABLE_NAME = '" + tname + "' AND COLUMN_NAME = '" + code + "_C' ) > 0, \"SELECT 1', \"ALTER TABLE " + tname + " ADD " + code + "_C int(3) NOT NULL default '0'; \" )); PREPARE alterIfNotExists FROM @preparedStatement; EXECUTE alterIfNotExists; DEALLOCATE PREPARE alterIfNotExists;";
        try
        {
            using (MySqlConnection conn = new MySqlConnection(ConStr))
            {
                conn.Open();
                using (MySqlCommand cmd = new MySqlCommand(qry, conn))
                {
                    cmd.ExecuteNonQuery();
                }

            }

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

    }
角色

\"SELECT 1', \"A
与上的原始查询不匹配

"SELECT 1",
"A
你发现了吗?您用零件的“.

替换了后面的1

\"SELECT 1', \"A
与上的原始查询不匹配

"SELECT 1",
"A

你发现了吗?您将after 1替换为“.

我刚刚找到了检查列exist的其他方法。。仅在下面的查询中使用,并检查列是否存在,并在列循环中进行迭代

string last_col = "SELECT COLUMN_NAME FROM information_schema.COLUMNS  WHERE TABLE_SCHEMA = 'attendance' AND TABLE_NAME ='" + subCodeText.Text + "'";

其中,考勤是数据库和子代码Text。Text是我的表名。

我刚刚找到了检查列存在的其他方法。。仅在下面的查询中使用,并检查列是否存在,并在列循环中进行迭代

string last_col = "SELECT COLUMN_NAME FROM information_schema.COLUMNS  WHERE TABLE_SCHEMA = 'attendance' AND TABLE_NAME ='" + subCodeText.Text + "'";

其中,考勤是数据库和子代码Text。Text是我的表名。

尝试以下操作:string qry=@SET@preparedStatement=SELECT,如果从信息\u schema中选择count*。列中,表\u schema='attention'和表\u name='+tname+',列\u name='+code+\u C'>0,选择1',\ALTER TABLE+tname+ADD+code+\u C int3非空默认值“0”;\;从@preparedStatement准备alterIfNotExists;执行alterIfNotExists;取消分配准备AlterifnoteExists;;谢谢,但同样的错误显示您的执行代码。我已经用执行代码编辑了我的问题,为什么不编写一个存储过程。请尝试以下操作:string qry=@SET@preparedStatement=SELECT如果从信息中选择count*FROM\u schema.COLUMNS,其中TABLE\u schema='attention',TABLE\u NAME='+tname+'和COLUMN\u NAME='+code+\u C'>0,\SELECT 1',\ALTER TABLE+tname+ADD+code+\u C int3非空默认值“0”;\;从@preparedStatement准备alterIfNotExists;执行alterIfNotExists;取消分配准备AlterifnoteExists;;谢谢,但它是相同的错误显示您的执行代码。我已经用执行代码编辑了我的问题,为什么不编写一个存储过程。是的,但不是问题,我再次替换了相同的错误是的,但不是问题,我再次替换了相同的错误