Wybierz opcję Zapytanie, aby pobrać dane z programu SQL Server
Próbuję uruchomić zapytanie SQL Select w moim kodzie C #. Ale zawsze otrzymuję wynik -1
int result = command.ExecuteNonQuery();
Jednak ta sama tabela, jeśli używam do
deletelub
insert, działa ...
ConnectStringteż jest w porządku.
Sprawdź poniższy kod
SqlConnection conn = new SqlConnection("Data Source=;Initial Catalog=;Persist Security Info=True;User ID=;Password=");
conn.Open();SqlCommand command = new SqlCommand("Select id from [table1] where name=@zip", conn);//command.Parameters.AddWithValue("@zip","india");
int result = command.ExecuteNonQuery();// result gives the -1 output.. but on insert its 1
using (SqlDataReader reader = command.ExecuteReader())
{
// iterate your results here
Console.WriteLine(String.Format("{0}",reader["id"]));
}conn.Close();
Zapytanie działa dobrze na SQL Server, ale nie rozumiem, dlaczego nie działa tylko zapytanie wybierające.
Wszystkie inne żądania działają.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
6 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Sposób
SqlCommand.ExecuteNonQuery
Funkcji ExecuteNonQuery można używać do wykonywania operacji katalogowych (takich jak wykonywanie zapytań dotyczących struktury bazy danych lub tworzenia obiektów bazy danych, takich jak tabele) lub do modyfikowania danych w bazie danych bez użycia DataSet przez wykonanie instrukcji UPDATE, INSERT lub DELETE.
Mimo że funkcja ExecuteNonQuery nie zwraca żadnych wierszy, wszystkie parametry wyjściowe lub wartości zwracane, które są zamapowane na parametry, są wypełniane danymi.
W przypadku instrukcji UPDATE, INSERT i DELETE wartością zwracaną jest liczba wierszy, na które ma wpływ polecenie. Gdy wyzwalacz istnieje we wstawionej lub zaktualizowanej tabeli, wartość zwracana obejmuje liczbę wierszy, na które ma wpływ operacja wstawiania lub aktualizacji, oraz liczbę wierszy, na które ma wpływ wyzwalacz lub wyzwalacze. W przypadku wszystkich innych typów operatorów zwracana wartość to -1. Jeśli nastąpi wycofanie, wartość zwracana również wynosi -1.
Metoda SqlCommand.ExecuteScalar
wykonuje instrukcję języka Transact-SQL w celu połączenia i zwraca liczbę wierszy, których to dotyczy.
Więc nie. z instrukcji zwracanych przez instrukcję SELECT należy użyć metody ExecuteScalar.
Połączyć:
http://msdn.microsoft.com/en-us/ library/system.data.sqlclient.sqlcommand.executenonquery (v = vs.110). aspx
http://msdn.microsoft.com/en-u ... query(v=vs.110).aspx
Więc wypróbuj poniższy kod:
Anonimowy użytkownik
Potwierdzenie od:
http://msdn.microsoft.com/ru-ru/ library/system.data.sqlclient.sqlcommand.executenonquery (v = vs.110). aspx
http://msdn.microsoft.com/ru-r ... query(v=vs.110).aspx
wynik -
jest to liczba dotkniętych wierszy
a ponieważ Twoje zapytanie to ,
żadna linia nie zostanie dotknięta
(tj. wstawione, usunięte lub zaktualizowane).
Jeśli chcesz wrócić
jedna linia
zapytanie, użyj zamiast :
Jeśli jednak spodziewasz się zwrotu
Wiele wierszy
, to jedyna opcja:
Anonimowy użytkownik
Potwierdzenie od:
użyj tego w ten sposób
Wykona zapytanie i zwróci pierwszą kolumnę pierwszego wiersza w zestawie wyników zwróconych przez zapytanie. Dodatkowe kolumny lub wiersze są ignorowane.
Ponieważ chcesz otrzymać tylko jedną linię w zamian, usuń to użycie z kodu
ponieważ spowoduje to ponowne wykonanie polecenia i wpłynie na wydajność strony.
Anonimowy użytkownik
Potwierdzenie od:
http://msdn.microsoft.com/en-us/ library/system.data.sqlclient.sqlcommand.executenonquery (v = vs.110). aspx
http://msdn.microsoft.com/en-u ... query(v=vs.110).aspxW przypadku instrukcji UPDATE, INSERT i DELETE wartością zwracaną jest liczba wierszy, na które ma wpływ polecenie. Gdy wyzwalacz istnieje we wstawionej lub zaktualizowanej tabeli, wartość zwracana obejmuje liczbę wierszy, na które ma wpływ operacja wstawiania lub aktualizacji, oraz liczbę wierszy, na które ma wpływ wyzwalacz lub wyzwalacze. W przypadku wszystkich innych typów operatorów zwracana wartość to -1. Jeśli nastąpi wycofanie, wartość zwracana również wynosi -1.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Aby uzyskać więcej informacji, skontaktuj się z
różnice między executescalar i executenonquery
http://www.aspneto.com/ado-net ... .html
.
Mam nadzieję że to pomoże!