2012-07-23 8 views
5

Qui creo la tabella nel database in modo dinamico. L'utente inserisce il nome come suo desiderio e seleziona il tasto radio della lingua. Quindi il problema è dopo l'esecuzione del valore cmd.ExecuteNonQuery di I intero sta andando a -1 da 0. E mostra che la tabella non può essere creata ma quando vado al database è già stata creata con successo. Per favore fatemi sapere dove sto sbagliando. Grazie in anticipo !!cmd.ExecuteNonQuery valore di i intero sta passando a -1 da 0

protected void btnpaper_Click(object sender, EventArgs e) 
    { 
     try 
     {     
       string conn = ConfigurationManager.ConnectionStrings["sqlconn"].ConnectionString; 
       SqlConnection con = new SqlConnection(conn); 
       con.Open(); 
       char[] arr = new char[] {'n','g','l','i','s','h'}; 
       string str = "CREATE TABLE " + Label1.Text.Trim() + 
          txtpaperset.Text.Trim()+ rbtnEng.Text.TrimEnd(arr) + 
          "(" + "quesNo int NOT NULL PRIMARY KEY, " + 
          "question varchar(1000) NOT NULL," + 
          "ansA varchar(500) NOT NULL, " + 
          "ansB varchar(500) NOT NULL, " + 
          "ansC varchar(500) NOT NULL, " + 
          "ansD varchar(500) NOT NULL, " + 
          "rightAns varchar(50) NOT NULL " + ")";      
       SqlCommand cmd = new SqlCommand(str, con); 
       int i = cmd.ExecuteNonQuery(); 
       if (i > 0) 
       { 
        lblerrormsg.Visible = true; 
        con.Close(); 
       } 
       else 
       { 
        lblerrormsg.Text = "Table Not Created Please Try with Different Name!";       
        con.Close(); 
       }     

     } 
     catch (System.Exception excep) 
     { 
      MessageBox.Show(excep.Message); 
     }  
    } 
+1

È un invito per SQL-Injection? Usa i parametri SQL! A parte questo, chiudi sempre una connessione quando hai finito, meglio usando 'using-statement':' using (var con = new SqlConnection (conn)) {con.Aperto(); // ...} '(chiuderà implicitamente la connessione, anche in caso di eccezione). –

+2

@TimSchmelter: Non sono sicuro che SQL parametrizzato funzioni per DDL ... –

risposta

8

porta da MSDN Commento su SqlCommand.ExecuteNonQuery

Per UPDATE, INSERT e DELETE, il valore restituito è il numero di righe interessate dal comando. Quando un trigger esiste su una tabella inserita o aggiornata, il valore restituito include il numero di righe interessate dall'operazione di inserimento o di aggiornamento e il numero di righe interessate dal trigger o dai trigger. Per tutti gli altri tipi di istruzioni , il valore restituito è -1. Se si verifica un rollback, anche il valore restituito è -1.

7

Dalla documentazione per SqlCommand.ExecuteNonQuery (sottolineatura mia):

Per UPDATE, INSERT e DELETE, il valore restituito è il numero di righe interessate dal comando. Quando un trigger esiste su una tabella inserita o aggiornata, il valore di ritorno include il numero di righe interessate dall'operazione di inserimento o di aggiornamento e il numero di righe interessate dal trigger o dai trigger. Per tutti gli altri tipi di istruzioni, il valore restituito è -1. Se si verifica un rollback, anche il valore di ritorno è -1.

L'istruzione è una dichiarazione UPDATE, INSERT o DELETE? No. Quindi stai ricevendo -1.

Non è chiaro cosa si intende per il valore di i andare a -1 "da" 0. Non è mai 0. Non ha un valore fino a quando è assegnato uno dal risultato di ExecuteNonQuery.

+0

Voglio che l'utente sappia se la creazione della tabella è stata eseguita correttamente o meno. Quindi avevo usato l'intero. Per favore aiutatemi se posso usare un altro modo. –

+0

@rickevans: mi aspetto che se la creazione della tabella fallisce, otterrai effettivamente un'eccezione. Fai un tentativo: guarda cosa succede se provi a ricreare una tabella che esiste già. –

0

È di progettazione?

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

e anche:

cmd.executenonquery is returning -1 in vb.net windows application

che dici che stai ricevendo -1, giusto?

edit: per rispondere all'ultima parte della tua domanda, vedere questo:

Check if table exists in SQL Server

+0

Mi sto prendendo -1. tutto quello che voglio fare è notificare all'utente che la creazione della tabella è avvenuta con successo. –

+0

crea una query aggiuntiva per verificarlo. – johnny

+0

puoi per favore elaborare ?? –

-2

pubblica funzione condivisa Inserisci (ByVal SProcedure come stringa, parametri ByVal() Come SqlParameter) come booleano Utilizzando CNN come New SqlConnection (Emplooyes) Prova

  Dim cmd As SqlCommand = New SqlCommand(SProcedure, cnn) 
      cmd.CommandType = CommandType.StoredProcedure 
      cmd.Parameters.AddRange(parameters) 

      If cnn.State = ConnectionState.Closed Then 
       cnn.Open() 
      End If 

      Dim Ls As Integer 
      Ls= cmd.ExecuteNonQuery() 
      If Ls = -1 Then 
       Return False 
      Else 
       Return True 
      End If 

     Catch ex As Exception 
      Return False 
     Finally 
      cnn.Close() 
     End Try 
    End Using 
End Function 
+0

Benvenuto in Stack Overflow! Prenderesti in considerazione l'aggiunta di alcune narrative per spiegare perché questo codice funziona e cosa ne fa una risposta alla domanda? Questo sarebbe molto utile per la persona che fa la domanda e per chiunque altro venga. –