2013-06-24 76 views
0

我試圖使用保存的WinForms輸入到Firebird數據庫下面的代碼火鳥插入數據,必須聲明命令參數

string connString = ConfigurationManager.AppSettings["ConnectionString"]; 
      FbConnection fbConn = new FbConnection(connString); 
      fbConn.Open(); 
      FbTransaction tran = fbConn.BeginTransaction(); 

      try 
      {     
       string insertCmdStr = "INSERT INTO ARTICLES(ID,Group,Code,Name) "; 
       insertCmdStr += "VALUES(@id,@group,@code,@name)"; 
       FbCommand addDataCmd = new FbCommand(insertCmdStr, fbConn, tran);     

       addDataCmd.ExecuteNonQuery();     
      } 
      catch (FbException ex) 
      { 
       tran.Rollback(); 
       fbConn.Close(); 
       throw new Exception(ex.Message); 
      } 

      tran.Commit(); 
      fbConn.Close(); 

更是一分鐘後我收到以下錯誤(?):

必須聲明的命令參數

回答

3

命令文本(insertCmdStr)包含佔位符4個參數(@id ...),但是你不添加任何參數的命令對象,因此錯誤。
要解決這個問題,您需要知道爲每個參數提供了什麼值,並將該參數添加到命令的Parameters集合中。

舉個例子,你應該有這樣的代碼,(但使用你的變量值部分)也

string insertCmdStr = "INSERT INTO ARTICLES(ID,Group,Code,Name) "; 
insertCmdStr += "VALUES(@id,@group,@code,@name)"; 
FbCommand addDataCmd = new FbCommand(insertCmdStr, fbConn, tran);     
addDataCmd.Parametes.AddWithValue("@id", variable_containing_the_id_value); 
addDataCmd.Parametes.AddWithValue("@group",variable_containing_the_group_value); 
addDataCmd.Parametes.AddWithValue("@code",variable_containing_the_code_value); 
addDataCmd.Parametes.AddWithValue("@name",variable_containing_the_name_value); 
addDataCmd.ExecuteNonQuery(); 

,請記住,如果id列是標識列,那麼你不應該傳遞該字段的任何值,刪除對列表中的ID字段以及佔位符和參數的引用。