C# 在调用存储过程后执行查询
这是我的存储过程C# 在调用存储过程后执行查询,c#,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 ; 我用
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”的正确语法,以及类似“5378377032052”的名称,第1行的“6”
Return tmpDataSet use由于此数据,我还使用了其他工作,构造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]);
// ...
您在哪里编写代码来执行查询?如果插入是问题所在,请显示插入的代码,并提供发生错误的详细信息。在提供有关以前运行的SP的详细信息时,您必须确信这些信息是相关的。为什么您认为SP和插件之间存在连接?您将插件放在了哪里?关闭后?IDI使用了哪种数据类型需要插入数据从该存储过程中收集的表我在上面的代码DataTable dtb=tmpDataSet.Tables[0]后编写此代码;mCommand.CommandText=插入abc xxxx,yyyy值“+dtb.Rows[0][0]+”,“+dtb.Rows[0][1]+”;mConnection.Open;mCommand.ExecuteNonQuery;mConnection.Close;它显示错误您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以了解使用靠近“-14”的正确语法和名称,如“5378377032052”,第1行的“6”