[Erro 1] SqlServer solicita erro: variáveis escalares OleDbException devem ser declaradas
Hoje, eu uso .net para operar o SqlServer usando Oledb, mas ele sempre informa "Uma variável escalar deve ser declarada..." inexplicavelmente, adotei os dois métodos a seguir no código, mas sem sucesso:
Método 1: OleDbParameter[] p = new OleDbParameter[] {
novo OleDbParameter("@aa",1),
novo OleDbParameter("@bb","shelley"),
novo OleDbParameter("@cc",DateTime.Now)
};
Objcmd.Parameters.AddRange(p);
Método 2: OleDbParameter pp;
pp = new OleDbParameter("@aa",OleDbType.Integer);
pp.Valor = 1;
Objcmd.Parâmetros.Add(pp);
pp = new OleDbParameter("@bb", OleDbType.LongVarChar);
pp.Valor = "shelley";
Objcmd.Parâmetros.Add(pp);
pp = new OleDbParameter("@cc", OleDbType.Date);
pp.Value = DateTime.Agora;
Objcmd.Parameters.Add(pp); Não importa como você escreve, ele irá solicitar "Variável escalar @aa deve ser declarada". b,c) valores(@aa,@bb,@cc)", Objconn);Escrita correta: OleDbCommand Objcmd = new OleDbCommand("inserir em valores de teste (a,b,c)(?,?,?)", Objconn);Desta forma passou normalmente. [Erro 2] Sybase solicita um erro: Esta interface não é suportada (a exceção vem de HRESULT:0x80004002 (E_NOINTERFACE)).net usa Oledb para operar Sybase porque o mesmo parâmetro pode ser usado várias vezes em uma instrução SQL O código é. do seguinte modo:
OleDbCommand Objcmd = new OleDbCommand("atualizar conjunto de testes a=@aa onde a=@aa ", Objconn);
OleDbParameter[] p = novo OleDbParameter[] {
novo OleDbParameter("aa",1),
novo OleDbParameter("aa",1)
};
Objcmd.Parameters.AddRange(p);
Objconn.Open();
Objcmd.ExecuteNonQuery();
Objconn.Close(); O código acima exibirá o erro "Esta interface não é suportada (a exceção vem de HRESULT: 0x80004002 (E_NOINTERFACE))". A causa do problema é que existem dois nomes idênticos nos parâmetros. Neste caso, você só precisa escrever um parâmetro.
OleDbCommand Objcmd = new OleDbCommand("atualizar conjunto de testes a=@aa onde a=@aa ", Objconn);
OleDbParameter[] p = novo OleDbParameter[] {
novo OleDbParameter("aa",1)
};ou
OleDbCommand Objcmd = new OleDbCommand("atualizar conjunto de teste a=@aa onde a=@aa2 ", Objconn);
OleDbParameter[] p = novo OleDbParameter[] {
novo OleDbParameter("aa",1),
novo OleDbParameter("aa2",1)
};【Resumir】
Se você escrever um programa que precise oferecer suporte a SqlServer e Sybase, precisará prestar atenção especial a este ponto:
1.SqlServer precisa usar "?" como espaço reservado para parâmetro, o que exige que mesmo que o mesmo parâmetro seja usado, o parâmetro deve ser adicionado várias vezes;
2. Se o Sybase usar o mesmo parâmetro várias vezes, o parâmetro não poderá ser adicionado várias vezes, caso contrário, um erro será relatado;
http://www.cnblogs.com/shelley/archive/2010/05/25/1743438.html