Ich verstehe nicht, warum jeder versucht, ExecuteNonQuery oder ExecuteScalar zu verwenden, wenn die Abfrage in der Frage eine SELECT-Anweisung ist. Wenn es sich um einen Aufruf einer gespeicherten Prozedur handelte, der die Logik von INSERT versus UPDATE basierend auf dem Vorhandensein eines Werts berücksichtigte, würde das ExecuteScalar sinnvoll sein, da Sie den gewünschten einzelnen Wert aus einer gespeicherten Prozedur zurückgeben können.
Allerdings, angesichts der Struktur der Frage, lehne ich als Antwort darauf hin.
// Automatically dispose the connection when done
using(SqlConnection connection = new SqlConnection(sqlConnection.ConnectionString)) {
try {
connection.Open();
// query to check whether value exists
string sql = @"SELECT dataset1
FROM dbo.ste
WHERE project = 'whatever'
AND date = '2010-11-30'";
// create the command object
using(SqlCommand command = new SqlCommand(sql, connection)) {
using(SqlDataReader reader = command.ExecuteReader()) {
// if the result set is not NULL
if(reader.HasRows) {
// update the existing value + the value from the text file
}
else {
// insert a value from a text file
}
}
}
}
finally {
// always close connection when done
if(connection.State != ConnectionState.Closed) {
connection.Close();
}
}
}
können Sie die Abfrage ändern WHERE EXISTS
zu verwenden, wenn Sie wollen volle Matches nicht streamen zurück, sondern von den Klängen der es, würden Sie nur sowieso höchstens 1 Ursache haben.
Warum möchten Sie eine Auswahl ausführen, ohne Ergebnismenge zu erwarten? – flq
Nein, ich verstehe den Punkt nicht. – RPM1984
weil, wenn es keine Ergebnismenge gibt, ich einen Wert von einer Textdatei aktualisieren muss, wenn es eine Ergebnismenge gibt, muss ich den vorhandenen Wert + den Wert von der Textdatei –