Вы делаете что-то странное с Connection и SqlCommand. Это должно работать:
public int getContractLength(string dogID, WeeklyBooking week)
{
SqlCommand getCLength = new SqlCommand("SELECT ContractLength FROM WeeklyBooking WHERE DogID = @DogId", db.Conn);
try
{
getCLength.Parameters.Add("@DogId", SqlDbType.NVarChar, 64);
getCLength.Parameters["@DogId"].Value = dogID;
db.Conn.Open();
week.contractLength = (int)getCLength.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return week.contractLength;
}
Вам необходимо связать ваше соединение и вашу SqlCommand. Вы можете сделать это, передав Соединение конструктору SqlCommand или попросив Соединение создать команду.
Кроме того, вы должны взглянуть на шаблон использования и убедиться, что ваше Соединение и SqlCommand созданы и уничтожены в правильном пути. Также обратите внимание, что я использую именованный параметр, это лучшая практика, поэтому вы не открыты для SQL -инъекции.
Вы также можете использовать более простую версию, где вы добавляете параметр со значением:
public int getContractLength(string dogID, WeeklyBooking week)
{
SqlCommand getCLength = new SqlCommand("SELECT ContractLength FROM WeeklyBooking WHERE DogID = @DogId", db.Conn);
try
{
getCLength.Parameters.AddWithValue("@DogId", dogID);
db.Conn.Open();
week.contractLength = (int)getCLength.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return week.contractLength;
}