2013-06-24 55 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字段以及占位符和参数的引用。