[Fehler 1] SqlServer meldet einen Fehler: Skalare OleDbException-Variablen müssen deklariert werden
Heute verwende ich .net, um SqlServer mit Oledb zu betreiben, aber es meldet immer „Eine Skalarvariable muss deklariert werden ...“ aus unerklärlichen Gründen habe ich die folgenden zwei Methoden in den Code übernommen, aber ohne Erfolg:
Methode 1: OleDbParameter[] p = new OleDbParameter[] {
neuer OleDbParameter("@aa",1),
neuer OleDbParameter("@bb","shelley"),
neuer OleDbParameter("@cc",DateTime.Now)
};
Objcmd.Parameters.AddRange(p);
Methode 2: OleDbParameter pp;
pp = new OleDbParameter("@aa",OleDbType.Integer);
pp.Value = 1;
Objcmd.Parameters.Add(pp);
pp = new OleDbParameter("@bb", OleDbType.LongVarChar);
pp.Value = "shelley";
Objcmd.Parameters.Add(pp);
pp = new OleDbParameter("@cc", OleDbType.Date);
pp.Value = DateTime.Now;
Objcmd.Parameters.Add(pp); Egal wie Sie es schreiben, es wird angezeigt, dass die Skalarvariable @aa deklariert werden muss. Der letzte Grund ist der folgende Satz: OleDbCommand = new OleDbCommand("insert into test (a, b,c) Werte(@aa,@bb,@cc)", Objconn);Richtiges Schreiben: OleDbCommand Objcmd = new OleDbCommand("insert into test (a,b,c)values(?,?,?)", Objconn);Auf diese Weise verlief es normal. [Fehler 2] Sybase meldet einen Fehler: Diese Schnittstelle wird nicht unterstützt (die Ausnahme kommt von HRESULT:0x80004002 (E_NOINTERFACE)).net verwendet Oledb, um Sybase zu betreiben, da derselbe Parameter möglicherweise mehrmals in einer SQL-Anweisung verwendet wird wie folgt:
OleDbCommand Objcmd = new OleDbCommand("update test set a=@aa where a=@aa ", Objconn);
OleDbParameter[] p = new OleDbParameter[] {
neuer OleDbParameter("aa",1),
neuer OleDbParameter("aa",1)
};
Objcmd.Parameters.AddRange(p);
Objconn.Open();
Objcmd.ExecuteNonQuery();
Objconn.Close(); Der obige Code löst den Fehler „Diese Schnittstelle wird nicht unterstützt (die Ausnahme kommt von HRESULT: 0x80004002 (E_NOINTERFACE))“ aus. Die Ursache des Problems liegt darin, dass die Parameter zwei identische Namen enthalten. In diesem Fall müssen Sie nur einen Parameter schreiben. Die Änderungen sind wie folgt.
OleDbCommand Objcmd = new OleDbCommand("update test set a=@aa where a=@aa ", Objconn);
OleDbParameter[] p = new OleDbParameter[] {
neuer OleDbParameter("aa",1)
};oder
OleDbCommand Objcmd = new OleDbCommand("update test set a=@aa where a=@aa2 ", Objconn);
OleDbParameter[] p = new OleDbParameter[] {
neuer OleDbParameter("aa",1),
neuer OleDbParameter("aa2",1)
};【Zusammenfassen】
Wenn Sie ein Programm schreiben, das SQLServer und Sybase unterstützen muss, müssen Sie diesem Punkt besondere Aufmerksamkeit schenken:
1.SqlServer muss „?“ als Parameterplatzhalter verwenden, was erfordert, dass der Parameter auch bei Verwendung desselben Parameters mehrmals hinzugefügt werden muss.
2. Wenn Sybase denselben Parameter mehrmals verwendet, kann der Parameter nicht mehrmals hinzugefügt werden, andernfalls wird ein Fehler gemeldet.
http://www.cnblogs.com/shelley/archive/2010/05/25/1743438.html