Ich habe eine gleichzeitige Warteschlange mit einem Klassenobjekt definiert, wie untenSqlBulkCopy mit gleichzeitiger Warteschlange
ConcurrentQueue<Data> DataQueue = new ConcurrentQueue<Data>();
public class Data
{
public string Id { get; set; }
public string T { get; set; }
public string D { get; set; }
public string L { get; set; }
public string I { get; set; }
public string V { get; set; }
}
Ich verwende folgenden Code einzufügen in
db definiert 65000 Aufzeichnungen hältpublic void InsertIntoDB()
{
using (cn = new SqlConnection(connectionString))
{
cn.Open();
Data item;
while (SpotDataQueue.Count > 0)
{
if (DataQueue.TryDequeue(out item))
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandText = @"INSERT INTO [TableName] ([WId], [L], [I], [V],[JId],[I],[DateTime]) VALUES (@WId, @l, @i, @v, @jid,@i,@dt)";
cm.Parameters.AddWithValue("WId", item.Id);
cm.Parameters.AddWithValue("@l", item.L);
cm.Parameters.AddWithValue("@i", item.I);
cm.Parameters.AddWithValue("@v", item.V);
cm.Parameters.AddWithValue("@jid", 1);
cm.Parameters.AddWithValue("@i", false);
cm.Parameters.AddWithValue("@dt", DateTime.Now);
cm.ExecuteNonQuery();
}
}
}
}
}
Tabellenstruktur:
WId nvarchar(50) AllowNulls
L nvarchar(MAX) AllowNulls
I nvarchar(MAX) AllowNulls
V nvarchar(MAX) AllowNulls
JId int AllowNulls
I bit AllowNulls
DateTime datetime AllowNulls
Wie meine gleichzeitige Warteschlange vom Typ Daten zu einer Datatable oder Datareader konvertieren SQLBULKCOPY möglich machen?
Danke.
Ich wäre vorsichtig mit Wenn Sie Ihre 'InsertIntoDB'-Funktion schneller einfügen als Sie in die concurrentQueue schreiben, wird Ihre' while'-Schleife beendet und neue Daten werden später hinzugefügt. Betrachten sie die Umstellung auf einen 'neuen Blocking (neu ConcurrentQueue ())' und mit 'foreach (Datenelement in SpotDataQueue.GetConsumingEnumerable()' statt) der while-Schleife und die 'TryDequeue' –
@ScottChamberlain: Hallo, ist Warteschlange bereits geladen mit 65000 Datensätzen, so dass das Problem in diesem Szenario nicht hier ist. Ich werde Ihren Vorschlag auch in Betracht ziehen. Danke :) –