[Kesalahan 1] SqlServer meminta kesalahan: Variabel skalar OleDbException harus dideklarasikan
Hari ini, saya menggunakan .net untuk mengoperasikan SqlServer menggunakan Oledb, tetapi selalu melaporkan "Variabel skalar harus dideklarasikan..." tanpa alasan yang jelas. Saya telah mengadopsi dua metode berikut dalam kode, tetapi tidak berhasil:
Metode 1: OleDbParameter[] p = OleDbParameter baru[] {
OleDbParameter baru("@aa",1),
OleDbParameter baru("@bb","shelley"),
OleDbParameter baru("@cc",DateTime.Sekarang)
};
Objcmd.Parameters.AddRange(p);
Metode 2: OleDbParameter hal;
pp = new OleDbParameter("@aa",OleDbType.Integer);
pp.Nilai = 1;
Objcmd.Parameters.Add(pp);
pp = new OleDbParameter("@bb", OleDbType.LongVarChar);
pp.Nilai = "shelley";
Objcmd.Parameters.Add(pp);
pp = new OleDbParameter("@cc", OleDbType.Date);
pp.Value = DateTime.Sekarang;
Objcmd.Parameters.Add(pp); Tidak peduli bagaimana Anda menulisnya, ia akan menampilkan "Variabel skalar @aa harus dideklarasikan". Alasan terakhir adalah kalimat berikut: OleDbCommand Objcmd = new OleDbCommand("insert into test (a, b,c) value(@aa,@bb,@cc)", Objconn);Penulisan yang benar: OleDbCommand Objcmd = new OleDbCommand("masukkan ke dalam pengujian (a,b,c)values(?,?,?)", Objconn);Dengan cara ini Itu berlalu dengan normal. [Kesalahan 2] Sybase memunculkan kesalahan: Antarmuka ini tidak didukung (pengecualian berasal dari HRESULT:0x80004002 (E_NOINTERFACE)).net menggunakan Oledb untuk mengoperasikan Sybase karena parameter yang sama dapat digunakan beberapa kali dalam pernyataan SQL sebagai berikut:
OleDbCommand Objcmd = new OleDbCommand("perbarui set tes a=@aa di mana a=@aa ", Objconn);
OleDbParameter[] p = OleDbParameter baru[] {
OleDbParameter baru("aa",1),
OleDbParameter baru("aa",1)
};
Objcmd.Parameters.AddRange(p);
Keberatan.Terbuka();
Objcmd.ExecuteNonQuery();
Objconn.Close(); Kode di atas akan memunculkan kesalahan "Antarmuka ini tidak didukung (pengecualian berasal dari HRESULT: 0x80004002 (E_NOINTERFACE))". Penyebab masalahnya adalah ada dua nama yang identik pada parameter. Dalam hal ini, Anda hanya perlu menulis satu parameter. Perubahannya adalah sebagai berikut:
OleDbCommand Objcmd = new OleDbCommand("perbarui set tes a=@aa di mana a=@aa ", Objconn);
OleDbParameter[] p = OleDbParameter baru[] {
OleDbParameter baru("aa",1)
};atau
OleDbCommand Objcmd = new OleDbCommand("perbarui set tes a=@aa di mana a=@aa2 ", Objconn);
OleDbParameter[] p = OleDbParameter baru[] {
OleDbParameter baru("aa",1),
OleDbParameter baru("aa2",1)
};【Meringkaskan】
Jika Anda menulis sebuah program yang perlu mendukung SqlServer dan Sybase, Anda perlu memberikan perhatian khusus pada hal ini:
1.SqlServer perlu menggunakan "?" sebagai pengganti parameter, yang mengharuskan meskipun parameter yang sama digunakan, Parameter harus ditambahkan beberapa kali;
2. Jika Sybase menggunakan parameter yang sama beberapa kali, Parameter tidak dapat ditambahkan beberapa kali, jika tidak, kesalahan akan dilaporkan;
http://www.cnblogs.com/shelley/archive/2010/05/25/1743438.html