1

我正在尝试使用以下代码将 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();

超过一分钟(?)后,我收到以下错误:

必须声明命令参数

4

1 回答 1

3

命令文本 (insertCmdStr) 包含 4 个参数 (@id...) 的占位符,但您没有向命令对象添加任何参数,因此出现错误。
要修复它,您需要知道为每个参数提供什么值并将该参数添加到命令的参数集合中。

作为一个例子,你应该有这个代码,(但使用你的变量作为值部分)

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

于 2013-06-24T20:47:52.467 回答