没有给出一个或多个所需参数的值

时间:2013-11-18 17:58:55

标签: c#

for (int i = 0; i < dtExcel.Rows.Count; i++)
{
    using (var conexao = Conexao())
    {
        conexao.Open();

        string rotaloja = Convert.ToString(dtExcel.Rows[i][1]) + Convert.ToString(dtExcel.Rows[i][0]);
        string bn = "select * from Emb where ROTALOJ= @rotaloja";
        OleDbCommand cmd1 = new OleDbCommand(bn, conexao);
        cmd1.Parameters.AddWithValue("@rotaloja", rotaloja);

        using (OleDbCommand Queryyy = new OleDbCommand(bn, conexao))
        {
           using (OleDbDataReader drr = Queryyy.ExecuteReader())
           {
                if (drr.Read())
                {
                    try
                    {
                        string cmdText = "UPDATE Emb SET ROTA=@p0, LOJA=@p1, QTDEEMBAL=@p2 where ROTALOJ= @rotaloja";
                        conexao.Open();
                        OleDbCommand cmd = new OleDbCommand(cmdText, conexao);
                        cmd.Parameters.AddWithValue("@p0", dtExcel.Rows[i][1]);
                        cmd.Parameters.AddWithValue("@p1", dtExcel.Rows[i][0]);
                        cmd.Parameters.AddWithValue("@p2", dtExcel.Rows[i][2]);
                        cmd.ExecuteNonQuery();
                    }
                    catch (OleDbException ex)
                    {
                        MessageBox.Show("Error" + ex);
                    }
                }
                else
                {
                    try
                    {
                        string cmdText = "INSERT INTO Emb (ROTALOJ , ROTA, LOJA, QTDEEMBAL) VALUES (@rotaloja,@p0,@p1,@p2)";
                        OleDbCommand cmd = new OleDbCommand(cmdText, conexao);
                        cmd.Parameters.AddWithValue("@p0", dtExcel.Rows[i][1]);
                        cmd.Parameters.AddWithValue("@p1", dtExcel.Rows[i][0]);
                        cmd.Parameters.AddWithValue("@p2", dtExcel.Rows[i][2]);
                        //////////////////////////////////////////////////////////////////////////////////////////////
                        cmd.ExecuteNonQuery();

                    }
                    catch (OleDbException ex)
                    {
                        MessageBox.Show("Error" + ex);
                    }
                }
            }
        }

     }           
}                    

我正在做更多的导入excel到数据库,当他确实选择查看你是否有数据库中的信息给出错误可以?对于那些帮助我的人,谢谢你

Img:http://i.stack.imgur.com/qxQDm.png

3 个答案:

答案 0 :(得分:2)

您创建了一个新查询Queryyy,并假设您的命令字符串cmd1可以使用先前查询bn附带的参数。您需要在查询Queryyy

中添加参数
using (OleDbCommand Queryyy = new OleDbCommand(bn, conexao))
{
   Query.Parameters.AddWithValue("@rotaloja", rotaloja); //here
   using (OleDbDataReader drr = Queryyy.ExecuteReader())
  //.......rest of your code
}

考虑使用有用的变量名称。

在您当前的代码中,您将参数添加到cmd1,该参数独立于Queryyy。在您的新查询Queryyy中,您正在使用需要参数的命令文本,并且由于您没有传递它,因此您将获得异常。

看看:OleDbCommand.Parameters Property,您可能必须使用?传递参数,因为它似乎不支持命名参数。

  

OLE DB .NET提供程序不支持传递的命名参数   SQL语句或由a调用的存储过程的参数   CommandType设置为Text时的OleDbCommand。在这种情况下,   必须使用问号(?)占位符。

答案 1 :(得分:0)

您未在此查询中设置@rotaloja的值:

"UPDATE Emb SET ROTA=@p0, LOJA=@p1, QTDEEMBAL=@p2 where ROTALOJ= @rotaloja"

答案 2 :(得分:0)

OleDBCommand不支持名称参数。在每个SQL语句中用?替换参数,并按照它们在查询中出现的顺序添加参数。