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到数据库,当他确实选择查看你是否有数据库中的信息给出错误可以?对于那些帮助我的人,谢谢你
答案 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语句中用?
替换参数,并按照它们在查询中出现的顺序添加参数。