我正在尝试使用数组中的值将值插入“cmdmysql.Parameters.Add”。但是它已经定义了生成异常值。以下是我的代码:
cmdmysql.CommandType = System.Data.CommandType.StoredProcedure;
string cd = ab;
string[] words = ab.Split(' ');
foreach (string word in words)
{
cmdmysql.Parameters.Add("@_maxvalue", MySqlDbType.Double).Value = words[0];
cmdmysql.Parameters.Add("@p_userid", MySqlDbType.Double).Value = words[1];
cmdmysql.Parameters.Add("@p_templateid", MySqlDbType.Double).Value = words[2];
cmdmysql.Parameters.Add("@p_resultid", MySqlDbType.Double).Value = words[3];
cmdmysql.Parameters.Add("@p_duration", MySqlDbType.Decimal).Value = words[4];
cmdmysql.Parameters.Add("@p_mode", MySqlDbType.VarChar).Value = words[5];
cmdmysql.Parameters.Add("@p_status", MySqlDbType.VarChar).Value = words[6];
cmdmysql.Parameters.Add("@p_description", MySqlDbType.Double).Value = words[7];
cmdmysql.Parameters.Add("@p_id", MySqlDbType.Double).Direction = System.Data.ParameterDirection.Output;
}
因此,例如,如果我尝试使用单词[0]将值插入@p_maxvalue,则会生成异常@p_maxvalue已定义。 有人对此有所了解吗?
答案 0 :(得分:2)
不要使用循环。
if(words.Length==8)
{
cmdmysql.Parameters.Add("@_maxvalue", MySqlDbType.Double).Value = words[0];
cmdmysql.Parameters.Add("@p_userid", MySqlDbType.Double).Value = words[1];
cmdmysql.Parameters.Add("@p_templateid", MySqlDbType.Double).Value = words[2];
cmdmysql.Parameters.Add("@p_resultid", MySqlDbType.Double).Value = words[3];
cmdmysql.Parameters.Add("@p_duration", MySqlDbType.Decimal).Value = words[4];
cmdmysql.Parameters.Add("@p_mode", MySqlDbType.VarChar).Value = words[5];
cmdmysql.Parameters.Add("@p_status", MySqlDbType.VarChar).Value = words[6];
cmdmysql.Parameters.Add("@p_description", MySqlDbType.Double).Value = words[7];
cmdmysql.Parameters.Add("@p_id", MySqlDbType.Double).Direction = System.Data.ParameterDirection.Output;
}
答案 1 :(得分:1)
问题是foreach循环。命令只能包含给定参数名称的单个值,但是当单词集合中有多个单词时,指定的代码将尝试两次使用相同的参数名称。
答案 2 :(得分:0)
取决于您使用.NET的版本,我会将Parameters.Add更改为Parameters.AddWithValue .Add已被弃用
cmdmysql.Parameters.AddWithValue("@_maxvalue", words[0]);
如果你尝试插入空值,我唯一没看到你处理的是DBNULL.Value ..查看Parameters.AddWithValue MSDN