2009-03-25 1 views
1

사용자가 여러 데이터베이스 명령을 입력 할 수있게하는 db에 명령 줄 인터페이스를 제공하고 싶습니다. 또는 쿼리 (텍스트 영역에서 줄 바꿈으로 구분).NET에서 웹 페이지를 통해 MSSQL 데이터베이스에 SQL 명령 행 인터페이스 (osql)를 제공하는 방법 MVC (C#)

각 줄에 대해 쿼리가 결과를 반환해야하고 해당 명령이 성공했는지 여부에 관계없이 - 사용자가 스크립트를 텍스트 영역을 선택하고 'GO'를 클릭하면 배치가 실행됩니다.

저는 응용 프로그램에서 데이터베이스와 인터페이스하기 위해 DataContext를 사용했지만 어디서부터 시작해야하는지 CLUE를 알지 못합니다. 도움을 주시면 감사하겠습니다.

답변

1
  1. 귀하의 웹 사이트에 보안 관련 문제가 있다고 생각하십시오.

  2. 보안에 대해 다시 생각해보십시오. 어떻게 영리한 사용자 (당신처럼 나보다 똑똑)가이 페이지를 사용하여 데이터베이스를 해킹 할 수 있습니까?
    아마/아마도 당신이이 단계에서 생각하지 않는 잘못된 형식의 SQL을 사용하고있을 것입니다.

  3. 사용중인 데이터베이스가 SQL 서버 인 경우 직접 SqlConnection과 SqlCommand을 사용하십시오. 이들을 사용할 필요가있을 때 오라클 또는 다른 공급자를 사용하십시오. SqlCommand는 1 개의 결과로 더 많은 것을 반환 할 수 있습니다. 이는 하나의 쿼리에서 여러 명령의 경우에 유용합니다. 자세한 내용은 NextResult 방법을 참조하십시오.

0

이전 답변에서 지적했듯이 공개적으로 액세스 할 수있는 사이트 인 경우이 작업을 수행하지 마십시오!

당신이해야만하는 경우, 다음 코드는 당신이 무엇을했는지에 가깝습니다. 약간 수정하면 원하는 것을 정확히 얻을 수 있습니다.

public static bool ExecuteSql(string sqlScript) 
{ 
    bool success = true; 

    using (SqlConnection cn = new SqlConnection([YourConnectionString])) 
    { 
     SqlCommand cmd = null; 
     try 
     { 
      cn.Open(); 

      string[] commands = sqlScript.Split(new string[] { "GO\r\n", "GO ", "GO\t" }, StringSplitOptions.RemoveEmptyEntries); 
      foreach (string c in commands) 
      { 
       cmd = new SqlCommand(c, cn); 
       cmd.CommandType = CommandType.Text; 
       cmd.ExecuteNonQuery(); 
      } 
     } 
     catch (Exception ex) 
     { 
      success = false; 
      throw new Exception("Failed to execute sql.", ex); 
     } 
     finally 
     { 
      cn.Close(); 
     } 

     return success; 
    } 
} 
관련 문제