2014-01-21 58 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個單詞。

問題是如果變量值> 10958,變量'end'本身被2除以本身。

誰能告訴,這是什麼問題?

+0

如果你在'con.Close()'行放置了一個斷點,那麼'end'有什麼值? –

+0

@adamV在con.close()結尾的值是正確的,之後出現錯誤。 –

+0

然後您沒有顯示足夠的代碼;你的代碼中沒有一個顯示'end'被超出該行改變。 –

回答

1

我的數據庫裏有140280個單詞。

我猜你正在尋找獲得count,而不是MAX,你在end所得到的值的字段(SNo)的最大值。更改您的查詢來獲取COUNT(SNo)

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

還可以使用SqlCommand.ExecuteScalar方法獲取單個值回。考慮將你的連接對象和命令對象放在using聲明中。

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

的確如此,但在這種情況下,我認爲它會更有可能看到比計數更大的ID。 –

+1

@AdamV,我不確定它是否是一個ID,它可以保存重複值,如果它不是一個ID – Habib

+0

的確如此,它不一定是一個ID。無論如何,使用「COUNT」是獲取OP所需數據的更準確的方法。 –