2012-06-22 15 views
7

ho intenzione di modificare il valore di testo .. ma ho visto che c'è un problemaIl nome 'SqlDbType' non esiste nel contesto corrente

protected void btn_edit_Click(object sender, EventArgs e) 
    { 
     DatabaseConnector con = new DatabaseConnector().CreateInstance(); 
     SqlCommand com = new SqlCommand("UPDATE tbl_BinCardManager SET ItemName = @ItemName WHERE ItemNo = @ItemNo"); 
     com.Parameters.Add("@ItemName",sqlDbType.VarChar); 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 

    } 

ERRORE 1:

Il nome ' SqlDbType' non esiste nel contesto corrente

ERROR 2:

'ERPSystem.DatabaseConnector' non contiene una definizione per 'Apri' e nessun metodo di estensione 'Apri' che accetta un primo argomento di tipo 'ERPSystem.DatabaseConnector' potrebbe essere trovato (manca una direttiva o un riferimento all'assembly ?)

mio DBConnector Classe è:

class DatabaseConnector 
{ 
    private DatabaseConnector databaseConnector; 
    private string connectionString = "Data Source=lernlap;Initial Catalog=ERPSystemDB;User ID=sa;Password=sa123"; 

    public DatabaseConnector() 
    { 

    } 

    private SqlConnection connection; 

    private bool Connect() 
    { 
     try 
     { 
      connection = new SqlConnection(connectionString); 
      connection.Open(); 
      return true; 
     } 
     catch(Exception) { 

      return false; 

     } 
    } 

    internal DatabaseConnector CreateInstance() 
    { 
     if (databaseConnector == null) 
     { 
      databaseConnector = new DatabaseConnector(); 
      databaseConnector.Connect(); 
     } 
     return databaseConnector; 
    } 
+2

C# è case sensitive. –

+0

sì, ma non c'è alcun problema di sensibilità caso noto – Learner

+3

SqlDbType - hai avuto lettere minuscole s – javajavajava

risposta

12

C# è case sensitive ... Prova a usare intellisense.

SqlDbType 

Gli altri errori possono scomparire se si corregge il primo.


Una nota a parte, si sta andando a correre in perdite di connessione/memoria senza una corretta gestione delle risorse. Personalmente, utilizzo l'istruzione using per evitare le insidie.

Non sono del tutto sicuro di cosa sia "DatabaseConnector", possibile la tua classe, ma probabilmente dovresti usare SqlConnection o, eventualmente, SqlDatabase.

Aggiornamento: non sono sicuro che la classe DBConnector debba essere un singleton o una factory, o entrambi, quindi ho semplicemente semplificato la risposta per evitare di utilizzarla. Fai un'altra domanda con i dettagli su come creare il modello che stai cercando e fornire la classe DBConnector. Penso che sia fattibile, ma non ho abbastanza informazioni per sistemare quello che hai.

public static CONN_STR = "Data Source=lernlap;Initial Catalog=ERPSystemDB;User ID=sa;Password=sa123"; 

    protected void btn_edit_Click(object sender, EventArgs e) 
    { 
     using(SqlConnection con = new SqlConnection(CONN_STR)) 
     { 
      con.Open(); 

      using(SqlCommand cmd = new SqlCommand("UPDATE tbl_BinCardManager SET ItemName = @ItemName WHERE ItemNo = @ItemNo"), con) 
      { 

      // TODO: fill in param values with real values 
      cmd.Parameters.AddWithValue("@ItemName", "my item name"); 
      cmd.Parameters.AddWithValue("@ItemNo", 1); 

      cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
+0

un'altra cosa è in quel codice vicino a con.Open() e con.close() è sottolineato rosso.Quando metto il cursore su che poi ho visto Methos Stub Create. (poi ho visto quello creato in classe connettore db) Perché è così? – Learner

+1

Che cos'è IS DatabaseConnector? La tua classe? –

+1

@ChrisGessler - Se dovessi azzardare un'ipotesi, si basava su questo codice: http://www.codeproject.com/Articles/32909/Database-Connector –

7

SqlDbType la s ha bisogno di essere in maiuscolo!

2

Hai più errori.

  • Sulla base del modo in cui lo si utilizza, Credo che si intende SqlConnection invece di DatabaseConnector
  • Si crea uno SqlCommand nome com, ma si riferiscono ad essa come cmd
  • Sarà necessario assegnare lo SqlConnection al SqlCommand, o non saprà quale connessione aprire.
  • Fornire solo 1 parametro a SqlCommand, mentre la query richiede due (ItemNo e ItemName).

Edit, in base alla nuova fonte:

  • L'errore "DatabaseConnector' non contiene una definizione per 'Open'" può essere corretto scrivendo con.Connect() invece di con.Open().
  • Tuttavia, l'altro errore, che non ha una funzione "Chiudi()", non può essere corretto - non c'è modo di dirgli di chiudere una connessione.

È questo il proprio codice?

+0

Sì, questo è il mio codice – Learner

+0

Quindi aggiungere una funzione ad esso che può chiudere la connessione. Oppure butta via l'intero DatabaseConnector e usa direttamente SqlConnection. –

+0

quando sono presente in DatabaseConnector anche il mio connectiontring sa? – Learner

1

Stai utilizzando la classe prodotta da The Code Project?

Bene, penso che l'errore sia dovuto alla stringa di connessione. La stringa di connessione deve essere nella classe OdbcDatabaseConnector. Bene, non ho mai usato questa classe di Code Project, ma può esserlo.

+0

Sto usando il connettore del database SQL – Learner

3
yes but theres no any case sensitivity problem know 

È in realtà hanno errori di sintassi, perché si è utilizzato s invece di S. Inoltre SqlCommand non ha un metodo chiamato Open() né ha uno per Close()

Si deve usare SqlConnection in quanto contiene i metodi Open() e Close() e impostare la proprietà del SqlCommand Connection all'istanza di SqlConnection al fine di aprire e chiudi la connessione al tuo database.

0

La sua "S" maiuscola in SqlDbType, dopo aver effettuato la correzione, fare clic con il tasto destro del mouse sulla parola, passare il mouse sopra per risolvere l'opzione e aggiungere lo spazio dei nomi System.Data. ha funzionato per me!

1

Se si sta scrivendo con il capitale 'S', ma ancora lo stesso errore soprattutto in Visual Studio 2015, quindi invece di scrivere 'SqlDbType', scrivere: System.Data.SqlDbType

ad esempio:

param[0] = new SqlParameter("@Name", System.Data.SqlDbType.VarChar,50); 
Problemi correlati