2011-12-30 67 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; 
}