2011-12-30 70 views
0

我试图插入使用从数组的值中的值变成“cmdmysql.Parameters.Add”。但是它产生了一个已经定义的异常值。以下是我的代码:分配输入值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

取决于你使用的是.NET的什么版本我想改变Parameters.Add到Parameters.AddWithValue。新增已弃用

cmdmysql.Parameters.AddWithValue("@_maxvalue", words[0]); 

的,我没有看到的唯一的事情你处理的是DBNULL.Value,如果你尝试插入一个空值..检查出它Parameters.AddWithValue MSDN

+0

是的,它不允许我进入空值..... – 2011-12-30 07:12:48

+0

这就是为什么你仍然需要检查,只是柜面...的DBNull是一种价值,但如果你总是肯定的是,绝不会有任何空数据值要插入..然后不用担心..但数据永远是静态的,始终是主题,即使你不改变它改变.. – MethodMan 2011-12-30 07:15:56

1

的问题是foreach循环。一个命令只能包含给定参数名称的单值,然而,当有在词集合多个单词,指定的代码将尝试使用相同的参数名称两次。

+0

它的工作现在... thnx ...还有一个关于“@_maxvalue”,MySqlDbType.Double类型转换的问题) 。价值是双倍的价值。我是类型转换,但它不允许我把null放在表中,相同的字段maxvalue是可以为空的。 – 2011-12-30 07:10:17

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; 
}