OriginalGriff
Для начала, не делай этого так! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
Во-вторых, если в вашей БД есть только одно совпадающее значение, то зачем нужен цикл?
В-третьих, если это целое число в вашей БД, зачем преобразовывать его в строку, чтобы преобразовать обратно в целое число?
В-четвертых, вам нужно избавиться от SqlCommands, SqlReaders, SqlConnections, когда вы закончите с ними.
Попробовать это:
int clinicId;
string sqlClinicID = "SELECT ClinicID FROM GENERAL WHERE ClinicName =@CN";
using (SqlCommand cmd = new SqlCommand(sqlClinicID, con))
{
cmd.Parameters.AddWithVaue("@CN", txtClinicName.Text);
clinicId = (int) cmd.ExecuteScalar();
sendMsg(clinicId, username, txtPassword.Text, email);
}
Если это не решит вашу проблему, вам нужно объяснить более подробно, что именно происходит не так.
Спасибо, что это помогло мне, но я получаю ошибку на этой линии.
System.NullReferenceException: Object reference not set to an instance of an object.
clinicId = (int)cmd.ExecuteScalar();
Это потому, что нет соответствующего элемента - и ваш код не проверяет ввод пользователя. Когда вы не позволяете пользователю делать ошибки, ваш код будет терпеть неудачу - а пользователи делают ошибки все время: черт возьми, мне пришлось исправлять опечатки, пока я печатал это!
А когда совпадения нет, SQL не возвращает никаких строк.
Поэтому всегда позволяйте своим пользователям делать ошибки и обращаться с ними изящно:
int clinicId = -1;
string sqlClinicID = "SELECT ClinicID FROM GENERAL WHERE ClinicName = @CN";
using (SqlCommand cmd = new SqlCommand(sqlClinicID, con))
{
cmd.Parameters.AddWithValue("@CN", txtClinicName.Text);
object o = cmd.ExecuteScalar();
if (o == null)
{
... Report problem to user...
return;
}
clinicId = (int)o;
sendMsg(clinicId, username, txtPassword.Text, email);
}