2014-04-07 2 views
0

며칠 동안 문제가 발생했으며 온라인에서는 아무 것도하지 않는 것으로 보입니다.C# SQL 매우 많은 수의 매개 변수가 포함 된 삽입

나는 150 개의 열을 가진 SQL 테이블을 가지고있다. ODBC 연결에서 데이터를 읽고 있는데이 데이터를 SQL 테이블에 삽입하려고합니다. 기본적으로 SQL로 ODBC 테이블을 복제하십시오.

내 문제는 내가 문자열에 모든 것을 넣고 그것을 삽입하면 나는 이해할 수없는 이스케이프 문자와 예외가있는 시간을 보게된다.

나를 삽입 값으로 매개 변수화하는 방법이 있습니다. 각 매개 변수의 값을 개별적으로 지정하지 않아도됩니다.

이것은 내가 지금 가지고있는 것입니다. 누구는 SQL 형태에 ODBC 테이블을 이동하는 쉬운 방법을 알고있는 경우에도, 내가

private void fillTable(string tableName) 
    { 

     String query = "SELECT * FROM " + tableName; 
     OdbcCommand command = new OdbcCommand(query, Program.myConnection); 
     OdbcDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess); 

     int columnCount = reader.FieldCount; 
     for (int i = 0; i < columnCount; i++) 
     { 
      SqlCommand sCommand = new SqlCommand("ALTER TABLE " + tableName + " ADD " + reader.GetName(i) + " varchar(MAX)", Program.myConnection2); 
      sCommand.ExecuteNonQuery(); 
     } 

     string row=""; 
     while (!reader.IsClosed) 
     { 
      try 
      { 
       row = ""; 
       reader.Read(); 
       for (int i = 0; i < columnCount; i++) 
       { 
        if (reader != null) 
        { 
          if (reader.GetString(i).Contains('\'')) 
          { 
           Console.WriteLine("REPLACED QUOT"); 
           String s = reader.GetString(i).Replace("\'", "A"); 
           Console.WriteLine(s); 
           row += s; 
          } 
          else 
          { 
           row += "\'" + reader.GetString(i).Trim() + "\',"; 
          } 

         // Console.WriteLine("FILLER: " + reader.GetString(i)); 
        } 
        //Console.WriteLine(row); 
       } 
       //Console.WriteLine(); 
       row = row.Substring(0, row.Length - 1); 
       SqlCommand insertCommand = new SqlCommand("INSERT INTO " + tableName + " VALUES(\'1\'," + row + ")", Program.myConnection2); 
       insertCommand.ExecuteNonQuery(); 
      } 
      catch (SqlException exp) 
      { 
       Console.WriteLine(exp.StackTrace); 
       Console.WriteLine(row); 
       // this.Close(); 
      } 
     } 
     Program.myConnection2.Close(); 
    } 
+0

음, ODPC 매개 변수의 이름이 지정되지 않았습니다. 그리고 예, 당신은 필드를 얻기 위해 스키마 액세스를 사용할 수 있습니다 - 아 - 매개 변수를 매개 변수. 나는 당신이 특정 질문을 할 때 앉아서 다시 시도한 다음 돌아올 것을 제안합니다. – TomTom

+1

동적 SQL 명령 사용 시도 http://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/ –

답변

1

당신은, 자동으로 매개 변수 이름을지지 명령에 추가하는 방법을 쓸 수 알려, 그 때문에 이름을 반환하십시오 당신은 쿼리에서 사용할 수 있습니다 :

private int _paramCounter = 1; 

private string CreateParameter(SqlCommand command, object value) { 
    string name = "@P" + _paramCounter.ToString(); 
    _paramCounter++; 
    command.Parameters.AddWithValue(name, value); 
    return name; 
} 

사용법 : 당신이 열을 통해 루프 전에 명령 개체를 만들 필요가

row += CreateParameter(insertCommand, reader.GetString(i).Trim()) + ","; 

참고. 또한 필요하지 않지만 각 행에 _paramCounter을 재설정 할 수도 있습니다. 그렇지 않으면 매개 변수 이름이 결국 길어집니다.

관련 문제