C# 如何将mysql查询转换为可接受的c字符串?
如果列不存在,我将使用mysql动态创建列。。我得到了在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 =
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;;谢谢,但它是相同的错误显示您的执行代码。我已经用执行代码编辑了我的问题,为什么不编写一个存储过程。是的,但不是问题,我再次替换了相同的错误是的,但不是问题,我再次替换了相同的错误