2012-12-20 4 views
2

그래서 내 코딩 문제가있어서 누구든지 나를 도울 수 있는지 궁금해하고있었습니다.주어진 범위에서 누락 된 숫자 찾기

기본적으로 나는 VB.NET과 MSSQL을 사용하여 사용자가 설정 한 주어진 범위 사이에 누락 된 숫자를 찾기위한 프로그램을 만들고 있습니다. 프로그램은 테이블에서 읽고 텍스트 상자에 출력을 보냅니다. 그리고 위의 코드는 지금까지 내가 생각해 낼 수있는 것입니다. 그러나 문제는 잘못된 결과물을 얻고 내가 원하는 것을 얻지 못한다는 것입니다. 출력은 image입니다.

Function FindingMissingNumber() As String 

    Dim intX As Integer = Nothing 
    Dim intY As Integer = Nothing 
    Dim strSting As String = Nothing 
    Dim strSqlQUery As String = Nothing 
    Dim cmdSqlCommand As Data.SqlClient.SqlCommand = Nothing 
    Dim rdrDataReader As Data.SqlClient.SqlDataReader = Nothing 

    '------------------------------------------------------------------------------------------------------------------------ 
    '-> Process 
    '------------------------------------------------------------------------------------------------------------------------ 
    strSqlQUery = "Select ExReportPolicyNo From DBReport Order by ExReportPolicyNo" 
    Dim msSqlConnection As New Data.SqlClient.SqlConnection() 
    'NOTE - You may need to CHECK your connection string!!! in the line below 
    msSqlConnection.ConnectionString = "Data Source=SISBSQL\SISBSQL;Initial Catalog=ExceptionReport;User ID=sa;Password=123;" 
    cmdSqlCommand = New Data.SqlClient.SqlCommand(strSqlQUery, msSqlConnection) 
    If cmdSqlCommand.Connection.State = Data.ConnectionState.Closed Then cmdSqlCommand.Connection.Open() 
    rdrDataReader = cmdSqlCommand.ExecuteReader() 
    If rdrDataReader.HasRows Then 
     Do While rdrDataReader.Read() 
      intX = txtRangeLeft.Text 
      intY = txtRangeRight.Text 
      'intY = rdrDataReader.GetValue(rdrDataReader.GetOrdinal("ExReportPolicyNo")) 

      Do While intX <> intY 
       intX = intX + 1 
       If intX <> intY Then 
        strSting = strSting & intX & ", " 'if it is not, then record the non sequential number into the string 
       Else 
        Exit Do 
       End If 
      Loop 
     Loop 
    End If 
    If cmdSqlCommand.Connection.State = Data.ConnectionState.Open Then cmdSqlCommand.Connection.Close() 
    'return string 
    Return strSting 
    'tidy up 
    intX = Nothing 
    intY = Nothing 
    strSting = Nothing 
    strSqlQUery = Nothing 
    cmdSqlCommand = Nothing 
    rdrDataReader = Nothing 

End Function 

프로그램에서 여러 번 반복하여 잘못된 출력을 제공합니다. 출력은 "286118, 286120, 286121"로만 읽어야합니다. 질문은 어디에 잘못 되었습니까?

답변

1

시작과

Select distinct ExReportPolicyNo From DBReport 
Where ExReportPolicyNo between @start and @end 
Order by ExReportPolicyNo 

는 쿼리에서 목록 만들기 끝 값 사이에 행을 반환하기 위해 (사용 LINQ)

변경 쿼리를보십시오 :

Dim originalList as List(Of Integer) 
If rdrDataReader.HasRows Then 
Do While rdrDataReader.Read() 
originalList.Add(rdrDataReader.GetInt(0)) 
Loop 
End If 

범위의 목록에서 작성하여 시작 및 종료 번호

//Dim rangeList = Enumerable.Range(286117, 286121 - 286117 + 1).ToList() 
Dim starti = Int32.Parse(txtRangeLeft.Text) 
Dim endi = Int32.Parse(txtRangeRight.Text) 
Dim rangeList = Enumerable.Range(starti, endi - starti + 1).ToList() 
,

유 그것을 통해 나를 안내 할 수 있습니다, 누락 된 모든 숫자가

Dim missingList = originalList.Except(rangelist) 

내가 전에 LINQ를 사용한 적이

strString = String.Join(",", missingList.Select(x => x.ToString()).ToArray()) 
+0

위의 목록에서 CSV 문자열을 만들기 찾기? –

+0

"x"를 어떻게 선언해야합니까? –

+0

x을 선언 할 필요가 없습니다. –

관련 문제