2014-09-04 8 views
0

데이터가 데이터베이스에 삽입되지 않은 이유를 찾을 수 없습니다. 나는 SQL 서버를 사용한다. DB는 3 필드입니다. 1) id (int) 2) test1 (varchar (50)) 3) test2 (varchar (50))입니다. 난 텍스트 상자와 날짜에서 데이터를 삽입하려고합니다.데이터를 삽입 할 수 없습니다.

private void SaveToDB() 
    { 
     string strSql = ""; 
     string[] tos = txtTo.Text.Split(';'); 
     for (int i = 0; i < tos.Length; i++) 
     { 
      strSql += "INSERT INTO test (test1, test2) VALUES ('" + txtContent.Text.Trim() + "','" + DateTime.Now.ToString() + "');"; 
     } 
     using (SqlConnection connection = new SqlConnection(Common.ConnetionString)) 
     { 
      connection.Open(); 
      SqlTransaction tran = connection.BeginTransaction(); 
      try 
      { 
       SqlCommand cmd = new SqlCommand(strSql, connection, tran); 
       cmd.ExecuteNonQuery(); 
       tran.Commit(); 
      } 
      catch (Exception e) 
      { 
       tran.Rollback(); 
      } 
      finally 
      { 
       connection.Close(); 
       Response.Redirect("messagelist.aspx?flag=2"); 
      } 
     } 
    } 

하지만 코드, 루프

+0

이 코드는 [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection)에 익숙합니다. 대신 [Entity Framework] (http://msdn.microsoft.com/en-us/data/ef.aspx)와 같은 ORM을 사용하는 것이 좋으며 문제 해결에 도움이 될 수 있습니다. –

+0

특정 문제를 해결하기 위해 모든 변수가 대체 된 후 실제 SQL을 데이터베이스에 게시 할 수 있습니까? –

+0

또한 예외가 발생했다고 생각합니다. 자신이하는 것처럼 예외를 포착하고 삼키는 것은 정말 나쁜 습관입니다. 'tran.Rollback(); 후에'throw;'를 호출하십시오. 그것은 그 문제를 드러 낼 수 있습니다. –

답변

1

루프는 아마 전체 블록을 포함한다에서 해당 매개 변수 작업을 변경하는 방법. 또한 검색어를 매개 변수화하여 주사를 많이하지 않도록하십시오. 그냥 제안이지만, SqlTransaction tran에 반대하는 SQL 문에 BEGIN TRANSACTION을 사용하면 롤백을 처리하고 코드를 약간 정리할 수 있습니다.

string[] tos = txtTo.Text.Split(';'); 
for (int i = 0; i < tos.Length; i++) 
{ 
    string strSql = "INSERT INTO test (test1, test2) VALUES (@Content, @DateTime);"; 
    using (SqlConnection connection = new SqlConnection(Common.ConnetionString)) 
    { 
     connection.Open(); 
     SqlTransaction tran = connection.BeginTransaction(); 
     try 
     { 
      using (SqlCommand cmd = new SqlCommand(strSql, connection, tran)) 
      { 
       cmd.Parameters.AddWithValue("@Content", txtContent.Text.Trim()); 
       cmd.Parameters.AddWithValue("@DateTime", DateTime.Now.ToString()); 
       cmd.ExecuteNonQuery(); 
       tran.Commit(); 
      } 
     } 
     catch (Exception e) 
     { 
      tran.Rollback(); 
     } 
     finally 
     { 
      connection.Close(); 
      Response.Redirect("messagelist.aspx?flag=2"); 
     } 
    } 
} 
관련 문제