在將此問題標記爲重複項之前,以下是我不明白的棘手部分。這個錯誤是零星的,我相信代碼是正確的,它總是在工作,我正在處理Reader部分內部的if else條件可能出現的錯誤。下面是代碼:代碼未同步拋出索引超出界限數組?
public static Tuple<int, string> GetIDAndString(string term)
{
try
{
using (SqlConnection con = GetConnection())
using (cmd = new SqlCommand())
using (myReader)
{
int ID = 0;
string status = string.Empty;
cmd.Connection = con;
con.Open();
cmd.CommandText = @"SELECT t.TableID, t.Status
FROM Table t WITH (NOLOCK) /* I know NOLOCK is not causing the mistake as far as I know */
WHERE t.Term = @term";
cmd.Parameters.AddWithValue("@term", term);
myReader = cmd.ExecuteReader();
while(myReader.Read())
{
ID = myReader.IsDBNull(0) ? 0 : myReader.GetInt32(0);
status = myReader.IsDBNull(1) ? string.Empty : myReader.GetString(1).Trim();
}
myReader.Close();
return new Tuple<int, string>(ID, status);
}
}
catch (Exception)
{
throw;
}
}
我知道我應該使用,而不是一個元組的一類,但我不能改變現有的代碼,你可以看到。所以主要的問題是在生產服務器中有一個Index out of bounds array exception
這種方法,但我不能確定是什麼問題。
即使在查詢中找不到該術語,myReader也不會進入,我將返回ID = 0,status = string.Empty。有時,當我在調試代碼並在develpment server
上工作時,我的代碼開始在任何地方崩潰,向我展示異常情況,在哪裏測試代碼,我必須重新打開解決方案以避免這種情況(我還沒找到解決方案,甚至沒有清洗溶液)。
所以我希望有人在production server
有類似的經驗。我沒有生產服務器的規格,所以我對服務器一無所知。
創建新數據讀取不分享!這可能會給你帶來問題! – mybirthname
不要同意以前的評論,要麼創建新的實例,要麼同步對它的訪問。 –
@mybirthname,我是編程新手,你說不要共享dataReader。你的意思是不使用類聲明受保護的靜態SqlDataReader,然後在使用塊中使用它? –