2014-01-21 3 views
-3

Ниже приведен код для двоичного поиска в базе данных.Перечисление переменных данных не соответствует самому значению

int beg, mid, count = 0; 
SqlConnection con = new SqlConnection(); 
con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Dictionary.mdf;Integrated Security=True;User Instance=True"; 
SqlCommand cmd = new SqlCommand("select max(SNo) from WordList ", con); 
con.Open(); 
SqlDataReader dr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 
int end; 
while (dr.Read()) 
{ 
    end = Convert.ToInt32(dr.GetValue(0)); 
} 
con.Close(); 
beg = 0; 
mid = (beg + end)/2; 

while (beg <= end) 
{ 

В нашей базе данных 140280 слов.

проблема заключается в том, что переменная «конец» сама по себе делится на 2, если ее значение составляет> 10958.

Может ли кто-нибудь сказать, в чем проблема?

+0

Если вы установили точку останова на строку 'con.Close()', какое значение имеет значение 'end' в это время? –

+0

@AdamV at con.close() значение конца правильное, после чего что-то не получается. –

+0

Тогда вы не показываете достаточно кода; ни один из ваших кодов не показывает, что «конец» изменяется за пределами этой строки. –

ответ

1

В нашей базе данных 140280 слов.

Я предполагаю, что вы ищете, чтобы получить count вместо MAX, значение, которое вы получаете в end это значение MAX для поля (SNo). Измените запрос, чтобы получить COUNT(SNo)

SqlCommand cmd = new SqlCommand("select COUNT(SNo) from WordList ", con); 

использовать также SqlCommand.ExecuteScalar метод, чтобы получить одно значение обратно. Рассмотрите возможность включения объекта подключения и объекта команды в оператор using.

int end = (Int32)cmd.ExecuteScalar(); 
+1

Правда, но в этом случае я думаю, что более вероятно, что идентификатор будет больше, чем счетчик, чем тот, который ниже. –

+1

@AdamV, я не уверен, что это идентификатор, он может хранить повторяющиеся значения, если это не ID – Habib

+0

Это правда, это не обязательно должен быть идентификатор. Несмотря на это, использование «COUNT» является более точным способом получения данных, которые ищет OP. –

Смежные вопросы