2016-07-20 14 views
0

Wenn ich meine verkettete Einfügung durch Parameter ersetzte, wurde INSERT nicht mehr in der Datenbank gespeichert.C# speichert keine Daten in SQL Server

Ich benutze:

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); 

aber dann ist der Rückgabewert 1 für RowsAffected und -1 für totalRecords.

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

Sie sollten Ihr Passwort in der Post – Massanu

+0

in 'Int32 rowsAffected = cmd.ExecuteNonQuery() ;, was genau Sie hier ausführen? –

+0

Verwenden Sie ExecuteScalar() '(neuer SqlCommand (" SELECT COUNT (*) VON dbo.EmpInfo ", cmd.Connection)). ExecuteScalar()' –

Antwort

0

Sie sind nicht die ExecuteNonQuery an der richtigen Stelle verwenden und müssen an anderer Stelle ExecuteScalar verwenden. Auch rowsAffected wird immer 1 sein, da Sie nur einen Datensatz einfügen.

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

habe ich execute scalar hinzugefügt, aber eminfo wird auf geschrieben, aber die zweite Abfrage ist erfolgreich.Ich füge einen Code hinzu, um den Schreibvorgang zu stoppen, wenn beides fehlschlägt, aber ich verstehe nicht, warum die erste Abfrage nicht erfolgreich ist – user3442765

+0

'ParameterName =" @EmpYear ", Wert = EmpYear}); cmd.Parameters.AddWithValue (" @ EmpYear ", EmpYear);' sieht nicht richtig für mich aus. – kurakura88

0

Man konnte immer n schneiden Sie Ihre SQL in eine eigene Datei einfügen und lassen QueryFirst alle Parameter-Code generieren. Ihre SQL-Syntax wird validiert, Sie müssen sich nicht um die Arten von Parametern kümmern. Ihre Wartung wird vereinfacht, und wenn Ihr Datenbankschema sich ändert, werden Sie sofort sehen, wenn Ihr SQL defekt ist.

Verwandte Themen