2016-03-30 8 views
0

Ich arbeite an einer Winform-Anwendung und ich verwende eine Tabelle mit dem Namen [Datei] in meiner SQL Server-Datenbank.SqlDataAdapter dauert zu lange, um VB.NET SQL Server 2012 zu füllen

Ich habe eine Form, die einige "[Datei]" Felder fID und fName in einer Combobox namens search sieht. FID für Wert und FName für Anzeige. SearchName Combobox ist an Datensatz mit DataAdapter Füllungstabelle mit FID, FName, fPhoneNumber, fBalance gebunden, so dass ich FName und FID verwenden kann.

Ich habe auch Textfelder, um neue "Datei" -Daten hinzuzufügen wie: fName, fAge, fNationality, fSex mit einem Speichern-Knopf mit einem anderen Combobox namens "" "Quelle".

Wenn Benutzer auf klickt Speichern Sie die Daten werden in Tabelle [File] In DB gespeichert und der Adapter wird erneut gefüllt.

Der Datensatz wurde Table eine gespeicherte Prozedur wie folgt verwendet:

create proc [dbo].[ReadFileData](@fid int,@filter varchar(20)) 
as 
begin 
declare @f varchar(20)[email protected]; 
declare @id int [email protected]; 
if(@id=-1) 
begin 
if(@f='All') 
select fID,fName,fPhoneNumbers,fBalance from [File]  
else 
if(@f='Blocked') 
select fID,fName,fNotes,fBalance,fBlockDate,uFullName 
from [File],[User] where fBlocked='True' and fBlocker=[uID] 
order by fBlockDate desc 
else 
if(@f='nonBlocked') 
select fID,fName,fPhoneNumbers,fBalance from [File] where fBlocked='False' 
else 
if(@f='notReady') 
select fID,fName,fPhoneNumbers,fBalance from [File] where fAllTestsOK='False' and fBlocked='False' 
else 
if(@f='Ready') 
select fID,fName,fPhoneNumbers,fBalance from [File] where fAllTestsOK='True' and fBlocked='False' 
else 
if(@f='NegBalanced') 
select fID,fName,fPhoneNumbers,fBalance from [File] where fBalance<0 
end 
else 
select f.fID,fName,fSex,fBirthDate,fPhoneNumbers,fAddress,fNationality,fNotes,fBalance,fBlocked,(select uFullName from [User] where uid=f.fBlocker) as fBlocker, 
fLastEdited,(select uFullName from [User] where [uID]=f.fEditor) as fEditor, fBlockDate from [File] f where [email protected] 
end 

Es wurde zu viel Zeit die Combobox erneut zu speichern und zu füllen. Ich suchte über das Internet und ich fand heraus, das Problem heißt "Patamter Sniffing/Spoofing", weil mein Verfahren Felder basierend auf den Werten des Parameters ausgewählt wurde, die es empfängt. Ich habe verschiedene Wege ausprobiert, um es zu lösen, aber nichts hat für mich geklappt. (P.S. Ich verwende den gleichen SP auf anderen Formen und Daten werden sofort ohne Probleme gefüllt).

Ich löschte den gesamten Datensatz und erstellt einen neuen mit einem neuen Dataadapter neue gespeicherte Prozedur, um diesen:

create proc [dbo].[GetAllFiles] 
as 
begin 
select fID,fName,fPhoneNumbers,fBalance from [File] 
end 

nun zunächst die Zeit sparen und füllen wird in kürzester Zeit durchgeführt, aber nach, dass es dauert, wie 10+ Sekunden zu füllen.

Ich möchte wissen, was ich tun kann, um den Datenadapter weiter zu verwenden, um die Combobox zu füllen und zeitaufwendiges Problem zu lösen? Wenn Sie irgendwelche Vermutungen haben, die diese Art von Problemen verursachen könnten, lassen Sie es mich bitte wissen. Welche anderen Code-Teile oder sogar Design-Bilder kann ich zur Verfügung stellen, um mein Problem klarer zu machen?

enter image description here

+0

Anstatt die Abfrage erneut für einen Filter auszuführen, können Sie mit DataView einen Filter auf die Daten anwenden, die Sie bereits geladen haben. – Plutonix

+0

Danke für die Antwort, aber ich habe ein ganzes Projekt auf die gleiche Weise ausgeführt. Ich benutze das viel in diesem und anderen Projekten. Ich würde gerne wissen, was damit nicht stimmt und was den Adapter so lange dauert? – Shoshotto

+0

Ich möchte auch den Adapter verwenden, damit ich es auch für eine andere Combobox verwenden kann, die das FID anzeigt. – Shoshotto

Antwort

0

Dank @Plutonix. Er schrieb es in einer Antwort, nur um es klarer zu machen.

„Sie sollten ein paar Stunden auf MSDN verbringen Sie brauchen nicht erneut abzufragen/Refill/rebuild eine Datentabelle, wenn Sie Zeilen hinzufügen, sie können aufgefrischt werden - Plutonix.“

I verwendet DataAdapterName. Adaptor.Update (DatasetName) in der Save-Taste und anderen Update-Stellen. Und füllte nur beim Seitenladeereignis auf.

Verwandte Themen