使用数组将输入值分配给cmdmysql.Parameters.Add

时间:2011-12-30 06:16:23

标签: c# mysql

我正在尝试使用数组中的值将值插入“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已定义。 有人对此有所了解吗?

3 个答案:

答案 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