这是我的存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_CPC`(
IN _B VARCHAR(100),
IN _G VARCHAR(2),
IN _R VARCHAR(30),
IN _D VARCHAR(30),
OUT _C FLOAT,
OUT _P FLOAT)
BEGIN
//Something Hear
END$$
DELIMITER ;
我通过C#流动代码
调用此存储过程DataSet tmpDataSet = new DataSet();
mCommand.CommandText = "sp_CPC";
mCommand.CommandType = CommandType.StoredProcedure;
// mCommand.CommandText = "sp_select_all_employees";
mCommand.Parameters.AddWithValue("@_B", "bty-23");
mCommand.Parameters.AddWithValue("@_G", "3");
mCommand.Parameters.AddWithValue("@_R", "9000");
mCommand.Parameters.AddWithValue("@_D", "92");
mCommand.Parameters.Add("@_C",MySqlDbType.Float);
mCommand.Parameters["@_C"].Direction = ParameterDirection.Output;
mCommand.Parameters.Add("@_P", MySqlDbType.Float);
mCommand.Parameters["@_P"].Direction = ParameterDirection.Output;
try
{
mConnection.Open();
mCommand.ExecuteNonQuery();
mAdapter.Fill(tmpDataSet)
}
catch (Exception ex)
{
strErrorInfo = ex.ToString();
}
finally
{
mConnection.Close();
}
DataTable dtb = tmpDataSet.Tables[0];
mCommand.CommandText = "INSERT INTO abc (xxxx,yyyy) VALUES ('" + dtb.Rows[0][0] + "','" + dtb.Rows[0][1] + "')";
mConnection.Open();
mCommand.ExecuteNonQuery();
mConnection.Close();
return tmpDataSet;
它在此命令中显示错误mCommand.ExecuteNonQuery(); 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'-14'附近使用正确的语法,并在第1行命名LIKE'5378377032052','6'。
(返回tmpDataSet)使用因为这个数据我也使用了另外的工作
答案 0 :(得分:0)
构造INSERT
语句的方式不安全。您连接可能包含'
个字符的字符串,以使您的INSERT
语句变得无效 - 并且还容易受到SQL注入攻击。您在评论中显示的错误消息指向此方向。
为了解决这个问题,请像在存储过程中一样使用INSERT
语句中的参数。
样品:
// ...
mCommand.CommandText = "INSERT INTO abc (xxxx,yyyy) VALUES (@val1, @val2)";
mCommand.Parameters.AddWithValue("@val1", dtb.Rows[0][0]);
mCommand.Parameters.AddWithValue("@val2", dtb.Rows[0][1]);
// ...