调用存储过程后执行查询

时间:2014-02-09 06:36:39

标签: c#

这是我的存储过程

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)使用因为这个数据我也使用了另外的工作

1 个答案:

答案 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]);
// ...
相关问题