Hatanız, bir DataRow öğesinin ItemArray özelliğini bir dizeyle birleştirdiğinizden kaynaklanıyor. Bu durumda ItemArray (bir nesnenin [] örneğinin bir örneğidir), kendi değerlerinden otomatik olarak bir dize üreten ve böylece sınıf adını "object []" dizgesi olarak döndüren bir yönteme sahip değildir, ancak elbette bu, anlamsız sql dizesini üretir.
"insert into SelectedFeeds Values(object[])";
ama sadece datatables ve adaptörler ancak
string cmdText = @"SELECT FeedLibrary.* INTO [SelectedFeeds]
FROM FeedLibrary
where [email protected]";
using(OleDbConnection Connection = new OleDbConnection(StrCon))
using(OleDbCommand cmd = new OleDbCommand(cmdText, Connection))
{
Connection.Open();
cmd.Parameters.Add("@id", OleDbType.Integer).Value = Convert.ToInt32(frm2.FeedSelectListBox.SelectedValue);
cmd.ExecuteNonQuery();
}
kullanmadan sizin için her şeyi yapacağız bir
SELECT .... INTO deyimi inşa edebileceğini,
SELECT ... INTO
deyimi hedef tablo oluşturur ama zaten hedef tablo halinde hata veriyor bulunmaktadır. Bu sorunu çözmek için hedefin mevcut olup olmadığını bulmamız gerekiyor. o yoksa aksi takdirde biz iki farklı sorgu var Burada
INSERT INTO ..... SELECT
// First query, this creates the target SelectedFeeds but fail if it exists
string createText = @"SELECT FeedLibrary.* INTO [SelectedFeeds]
FROM FeedLibrary
where [email protected]d";
// Second query, it appends to SelectedFeeds but it should exists
string appendText = @"INSERT INTO SelectedFeeds
SELECT * FROM FeedLibrary
WHERE [email protected]";
using(OleDbConnection Connection = new OleDbConnection(StrCon))
using(OleDbCommand cmd = new OleDbCommand("", Connection))
{
Connection.Open();
// Get info about the SelectedFeeds table....
var schema = Connection.GetSchema("Tables",
new string[] { null, null, "SelectedFeeds", null});
// Choose which command to execute....
cmd.CommandText = schema.Rows.Count > 0 ? appendText : createText;
// Parameter @id is the same for both queries
cmd.Parameters.Add("@id", OleDbType.Integer).Value = Convert.ToInt32(frm2.FeedSelectListBox.SelectedValue);
cmd.ExecuteNonQuery();
}
kullanın ilk SELECT ... INTO
sorguyu kullanmak, ilki daha önce olduğu gibi SelectedFeeds
tablo oluşturmak, ikincisi ise bu tabloya ekler.
Hedef tablonun önceden oluşturulup oluşturulmadığını öğrenmek için Connection.GetSchema numaralı telefonu arayarak, tablo SelectedFeeds
varsa bir satır varsa ve böyle bir tablo yoksa satır bulunmuyorsa bir datatable (şema) çağırın.
Bu noktada OleDbCommand'ı yürütmek için doğru ifadeyle ayarladım.
Teşekkürler, belirli bir kimliğe sahip FeedLibrary içinden seçim yaptım, ne hakkında? – SaraniO
Tamam, WHERE parçasını eksik ve dize birleştirme yerine bir parametre kullanarak ekledim (tablonun kimliğin veritabanında bir Tamsayı türü olduğunu varsayalım) – Steve
tnx yine cod'ını denedim, ilk kez çalıştı (tablodan sonra ancak bu tabloya besleme eklenmez ve istisna şudur: {"Tablo 'SelectedFeeds' zaten var."} – SaraniO