2013-07-24 1 views
-1

사용하기 전에 dtSource 및 dtDestination에서 일부 값을 가져와야합니다. 하지만 데이터베이스 내부에 저장된 일부 값이 있더라도 내부에서 값을 검색 할 수없는 것 같습니다. foreach가 일부 값을 검색하는 데 유용합니까? 나는 그것을 디버깅했지만 dtSource와 dtDestination에서 문자열로 전달하기 전에 값을 검색하지 않는 것으로 보입니다.DataTable에서 특정 셀을 추출하고 콘솔 응용 프로그램에서 사용할 값을 검색하는 방법

static void Main(string[] args) 
    { 
     // Retrieve the connection string from Config table in master database 
     string strConnFromConfig = getConfigDetails(SalesKey.DBConnection); 

     DataTable dtSource = getSource(strConnFromConfig); 
     DataTable dtDestination = getDestination(strConnFromConfig); 
     DataTable dtRate = getRate(strConnFromConfig); 
     DataTable dtCode = getCode(strConnFromConfig); 

     //Having this issue here 
     foreach (DataRow rwSrc in dtSource.Rows) 
     { 
      foreach (DataRow rwDest in dtDestination.Rows) 
      { 
       string src = rwSrc["Value"].ToString(); 
       string dest = rwDest["Value"].ToString(); 

       ExcelTemplate XLT = new ExcelTemplate(); 
       XLT.Open(src); 
       DataBindingProperties dataProps = XLT.CreateDataBindingProperties(); 
       XLT.BindData(dtCode, "Code", dataProps); 
       XLT.BindData(dtRate, "Rate", dataProps); 

       XLT.Process(); 
       XLT.Save(dest); 
      } 
     } 
    } 

    // Retrieve the config details from master database 
    static string getConfigDetails(SalesKey salesKey) 
    { 
     string strCon = ConfigurationManager.ConnectionStrings["Master"].ConnectionString; 
     SqlConnection sqlConnection = new SqlConnection(strCon); 

     if (sqlConnection.State == ConnectionState.Closed) 
      sqlConnection.Open(); 

     string cSQL = "SELECT Value FROM dbo.COMMON_CONFIG WHERE Value = @value"; 

     SqlCommand sqlCommand = new SqlCommand(cSQL, sqlConnection); 
     sqlCommand.Parameters.AddWithValue("@value", salesKey.ToString()); // Need to cast the enumeration value as string 

     DataTable dataTable = new DataTable(); 
     dataTable.Load(sqlCommand.ExecuteReader()); 

     sqlCommand.Dispose(); 

     sqlConnection.Close(); 
     sqlConnection.Dispose(); 

     if (dataTable.Rows.Count > 0) 
     { 
      return dataTable.Rows[0]["Value"].ToString(); 
     } 
     else 
     { 
      return string.Empty; 
     } 
    } 

    // Generic method for sending in the SQL query to retrieve the specified dataset 
    static DataTable getData(string connection, string query) 
    { 
     SqlConnection sqlConnection = new SqlConnection(connection); 

     sqlConnection.Open(); 
     SqlCommand sqlCommand = new SqlCommand(query, sqlConnection); 

     //SqlDataReader reader = sqlCommand.ExecuteReader(); 

     DataTable dataTable = new DataTable(); 
     dataTable.Load(sqlCommand.ExecuteReader()); 

     sqlCommand.Dispose(); 

     sqlConnection.Close(); 
     sqlConnection.Dispose(); 

     return dataTable; 
    } 

    static DataTable getSource(string connection) 
    { 
     connection = ConfigurationManager.ConnectionStrings["Master"].ConnectionString; 
     string src = @"C:\Users\administrator.EBSDLAB\Desktop\Examples\Sales\currency.xlsx"; 
     string IdSQL = "SELECT VALUE FROM dbo.COMMON_CONFIG WHERE VALUE = '" + src + "'"; 
     return getData(connection, IdSQL); 
    } 

    static DataTable getDestination(string connection) 
    { 
     connection = ConfigurationManager.ConnectionStrings["Master"].ConnectionString; 
     string dest = @"C:\Users\administrator.EBSDLAB\Desktop\Examples\Sales\output.xlsx"; 
     string IdSQL = "SELECT VALUE FROM dbo.COMMON_CONFIG WHERE VALUE = '" + dest + "'"; 
     return getData(connection, IdSQL); 
    } 
+1

'선택 값에서 dbo.COMMON_CONFIG WHERE VALUE = some_value'는 이미 값을 알고 있음을 의미합니다. 따라서 DB에서 선택할 필요가 없습니다. 'SELECT ID FROM ID = 1' 결과가'1' 일 때'SELECT 1'이나'dest = 1'을하거나 필드 이름을 바꿀 수 있습니다 : D – mirkobrankovic

+0

@mirkobrankovic은 변경되지 않았습니다. 오류를 알고있다. 그리고 return dataTable.Rows [0] [ "Value"]에서 인덱스를 변경하면 ToString(); 값이 저장된 실제 인덱스에 대해 위치 3에 행이 없다는 오류를 반환합니다. 따라서 데이터가 내부에 저장되지 않는다는 의미입니까? – CHOCOx33

답변

1

당신은 "SELECT VALUE FROM dbo.COMMON_CONFIG WHERE VALUE = '" + src + "'";

당신이 보내는 SQL에게 값을 변경하고 다시 값을 선택해야합니다!

나는 당신이 Name하여 값을 얻을 데이터베이스 열 이름으로

"SELECT VALUE FROM dbo.COMMON_CONFIG WHERE Name= '" + src + "'";

변화 아래에 따라 같은 무언가를해야 할 수도 있습니다 생각하고,이 모든 SQL 문자열에 적용되는

참고 : SQL 매개 변수 및 문 사용

+0

작동합니다. 하지만 foreach 배열을 사용하지 않고 dtSource.Rows [5] .ToString()으로 바꾸면 위치 5에 행이 없다고 표시됩니다. 데이터가 없다는 뜻입니까? foreach 배열을 사용하는 것이 좋습니다? – CHOCOx33

관련 문제