2016-07-20 3 views
0

연결 삽입을 매개 변수로 바꿀 때 INSERT이 데이터베이스에 저장을 중단했습니다.C#이 SQL Server에 데이터를 저장하지 않습니다.

내가 사용

Int32 rowsAffected = cmd.ExecuteNonQuery();       
var totalRecords = (new SqlCommand("SELECT COUNT(*) FROM dbo.EmpInfo", cmd.Connection)).ExecuteNonQuery(); 

MessageBox.Show("RowsAffected: " + rowsAffected.ToString()); 
MessageBox.Show("Total Records: " + totalRecords); 

하지만 다음, 반환 값은 RowsAffected 1, 및 totalRecords -1이다. 영향을받는 행의

if (Status == RegistrationStatus.r_OK) 
{ 
    String query = "INSERT INTO dbo.EmpInfo(EmpYear, EmpStatus, LName, FName, JobTitle, EmpPay, EmpDoB, EmpSex, EmpAddr, EmpCity, EmpState, EmpZIP, EmpCountry, EmpEAddr, EmpTelNo, EmpMobileNo, EmpDate) VALUES (@EmpYear, @EmpStatus, @LName, @FName, @JobTitle, @EmpPay, @EmpDoB, @EmpSex, @EmpAddr, @EmpCity, @EmpState, @EmpZIP, @EmpCountry, @EmpEAddr, @EmpTelNo, @EmpMobileNo, getdate())"; 

    using (SqlConnection conn = new SqlConnection("Data Source=RB-DESKTOP;Initial Catalog=TimeDB;Persist Security Info=True;User ID=sa;Password=bautista7")) 
    { 
     if (conn.State == ConnectionState.Closed) 
     { 
      conn.Open(); 
     } 

     using (SqlCommand cmd = new SqlCommand(query, conn)) 
     { 
      using (SqlTransaction transaction = conn.BeginTransaction()) 
      { 
       cmd.Connection = conn; 
       cmd.Transaction = transaction; 

       ParameterName = "@EmpYear", Value = EmpYear }); 
       cmd.Parameters.AddWithValue("@EmpYear", EmpYear); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpStatus", Value = "Active" }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@LName", Value = regLname_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@FName", Value = regFname_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@JobTitle", Value = "NULL" }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpPay", Value = PayType_cb.SelectedItem.ToString()}); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpDoB", Value = regDob_dtp.Value.Date }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpSex", Value = gender }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpAddr", Value = regAddr_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpCity", Value = regCity_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpState", Value = regState_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpZIP", Value = regZip_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpCountry", Value = regCountry_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpEAddr", Value = regEmail_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpTelNo", Value = regTel_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpMobileNo", Value = regMob_text.Text}); 

       cmd.ExecuteNonQuery(); 
       transaction.Commit(); 
+2

당신은'INT32 rowsAffected = cmd.ExecuteNonQuery()에서 포스트 – Massanu

+0

에 암호를 숨길해야합니까? –

+0

사용 ExecuteScalar는()'(새하는 SqlCommand ("SELECT COUNT (*) dbo.EmpInfo FROM", cmd.Connection)). ExecuteScalar는()'추가 –

답변

0

당신은 바로 이곳에 ExecuteNonQuery를 사용하고하지 않을의 첫 번째 열을 반환 다른 곳에서는 ExecuteScalar을 사용해야합니다. 또한 rowsAffected은 레코드를 하나만 삽입하기 때문에 항상 1입니다.

if (Status == RegistrationStatus.r_OK) 
{ 
    String query = "INSERT INTO dbo.EmpInfo(EmpYear,EmpStatus,LName,FName,JobTitle,EmpPay,EmpDoB,EmpSex,EmpAddr,EmpCity,EmpState,EmpZIP,EmpCountry,EmpEAddr,EmpTelNo,EmpMobileNo,EmpDate) values(@EmpYear,@EmpStatus,@LName,@FName,@JobTitle,@EmpPay,@EmpDoB,@EmpSex,@EmpAddr,@EmpCity,@EmpState,@EmpZIP,@EmpCountry,@EmpEAddr,@EmpTelNo,@EmpMobileNo,getdate())"; 
    using (SqlConnection conn = new SqlConnection("Data Source=RB-DESKTOP;Initial Catalog=TimeDB;Persist Security Info=True;User ID=sa;Password=bautista7")) 
    { 
     if (conn.State == ConnectionState.Closed) 
     { 
      conn.Open(); 
     } 

     using (SqlCommand cmd = new SqlCommand(query, conn)) 
     { 
      using (SqlTransaction transaction = conn.BeginTransaction()) 
      { 
       cmd.Connection = conn; 
       cmd.Transaction = transaction; 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpYear", Value = EmpYear }); 
       cmd.Parameters.AddWithValue("@EmpYear", EmpYear); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpStatus", Value = "Active" }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@LName", Value = regLname_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@FName", Value = regFname_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@JobTitle", Value = "NULL" }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpPay", Value = PayType_cb.SelectedItem.ToString()}); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpDoB", Value = regDob_dtp.Value.Date }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpSex", Value = gender }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpAddr", Value = regAddr_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpCity", Value = regCity_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpState", Value = regState_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpZIP", Value = regZip_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpCountry", Value = regCountry_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpEAddr", Value = regEmail_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpTelNo", Value = regTel_text.Text }); 
       cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpMobileNo", Value = regMob_text.Text}); 

       Int32 rowsAffected = cmd.ExecuteNonQuery(); 
       transaction.Commit();       
       var totalRecords = (new SqlCommand("SELECT COUNT(*) FROM dbo.EmpInfo", cmd.Connection)).ExecuteScalar(); 
       MessageBox.Show("RowsAffected: " + rowsAffected.ToString()); 
       MessageBox.Show("Total Records: " + totalRecords); 
      } 
     } 
    } 
} 
+0

을 난 내가 첫 번째 쿼리가 성공하지 못한 이유를 이해 해달라고, 스칼라을 실행 추가했지만에게 empinfo 기록되고 있지만, 두 번째 쿼리는 성공적이다. 메신저 중 하나가 실패 할 경우 쓰기를 중지하는 코드를 추가하지만, . – user3442765

+0

'경우 ParameterName = "@EmpYear는"값 = EmpYear은}); cmd.Parameters.AddWithValue ("@의 EmpYear", EmpYear),'바로 나에게 보이지 않는다. – kurakura88

0

당신은 항상 에 자신의 파일 당신의 SQL을 붙여 QueryFirst 모든 매개 변수 코드를 생성 할 수 없음 줄일 수. 귀하의 SQL 구문 유효성이 검사됩니다, 당신은 매개 변수의 유형에 대해 걱정할 필요가 없습니다. 유지 보수가 간단합니다, 당신의 DB 스키마 변경 어느 경우 SQL가 파손 된 경우에는 바로 볼 수 있습니다. `정확히 당신이 여기에서 실행된다

관련 문제