I need to make the MySQL query "LOAD DATA LOCAL INFILE..." statement as parameterized SQL Query that accepts the value from variable. But unable to resolve it. The query along with C# code is given as below:
The SQL used is:
const string TableNameParam = "@tablename";
const string FieldDelimiterParam = "@fieldDelimiter";
const string ColSqlParam = "@colSql";
var sqlQuery = $"LOAD DATA LOCAL INFILE '{FilePathParam}'
INTO TABLE {TableNameParam} FIELDS TERMINATED BY '{FieldDelimiterParam}' {ColSqlParam}";
cmd.CommandText = sqlQuery;
cmd.Parameters.AddWithValue(FilePathParam, filePath);
cmd.Parameters.AddWithValue(TableNameParam, tableName);
cmd.Parameters.AddWithValue(FieldDelimiterParam, fieldDelimiter);
cmd.Parameters.AddWithValue(ColSqlParam, colSql.ToString().ToUpper());
cmd.ExecuteNonQuery();
It throws the same exception with message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? FIELDS TERMINATED BY '@fieldDelimiter' ?' at line 1
It seems like the SQL syntax error, but picking & mapping the individual value from the parameters does not give any syntax error.
Similarly, I have also tried by using the StoredProcedure for the same as below:
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@filePath", filePath);
cmd.Parameters.AddWithValue("@tablename", tableName);
cmd.Parameters.AddWithValue("@fieldDelimiter", fieldDelimiter);
cmd.Parameters.AddWithValue("@colSql", colSql.ToString().ToUpper());
cmd.ExecuteNonQuery();
The StoredProcedure used is as below:
CREATE PROCEDURE `sp_AggregateReport_LoadData`(
IN filePath VARCHAR(255), IN tablename VARCHAR(50),
IN fieldDelimiter VARCHAR(5), colSql VARCHAR(2500)
)
BEGIN
SET @sqlQuery= CONCAT("LOAD DATA LOCAL INFILE '",filePath,"' INTO TABLE ", tablename," FIELDS TERMINATED BY '",fieldDelimiter,"' ",colSql);
PREPARE stmt FROM @sqlQuery;
EXECUTE stmt;
END
It throws the exception with message: This command is not supported in the prepared statement protocol yet
Does anyone having the same issue previously using the parameterized MySQL query? Need help.