2013-08-20 4 views
6

Ich brauche einen Update-Befehl mit Parametern, und aus bestimmten Gründen kann ich nicht gespeicherte Prozeduren verwenden, tatsächlich generieren wir Update-Befehl abhängig von Datenbank, Tabelle und Spalten, verwenden wir die folgenden Formen:Ausnahme in Add Parameter zu DbCommand

 string conStr = "Provider=SQLNCLI10;Server=.\\sql2008;DataBase=MyDataBase;Trusted_Connection=true;"; 

     DbProviderFactory dbFactory = DbProviderFactories.GetFactory("System.Data.OleDb"); 
     DbConnection dbConnection = dbFactory.CreateConnection(); 
     dbConnection.ConnectionString = conStr; 

     DbCommand dbCommand = dbFactory.CreateCommand(); 
     dbCommand.CommandText = "UPDATE [Student] SET Name = @Name Where Id = @Id"; 

     DbParameter param1 = dbCommand.CreateParameter(); 
     param1.ParameterName = "@Name"; 
     param1.Value = "LOL"; 
     DbParameter param2 = dbCommand.CreateParameter(); 
     param2.ParameterName = "@Id"; 
     param2.Value = 5; 

     dbCommand.Parameters.Add(param1); 
     dbCommand.Parameters.Add(param2); 

     dbConnection.Open(); 
     dbCommand.ExecuteNonQuery(); 
     dbConnection.Close(); 

Aber es gibt eine Ausnahme:

muss die skalare Variable "@Name"

erklären, wo das Problem in dieser Dorsch e? Hat jemand eine Idee dazu?

+0

An welchem ​​Punkt haben assoziieren Sie den Befehl mit der Verbindung? Hat die Fabrik das gemacht? Außerdem, an welcher Linie bekommen Sie die Ausnahme? – Renan

+0

@Nilesh Gib mir das [link] (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx) Das ist die Antwort, aber wie wäre es mit 'Odbc' Befehl, funktioniert das wie 'Oledb'? –

Antwort

5

Wie Sie System.Data.OleDb als Datenbank-Provider verwenden (unabhängig Sie einen SQL-Server verwenden) können Sie den ? als Parameter Platzhalter wie verwenden müssen:

"UPDATE [Student] SET Name = ? Where Id = ?"; 

Durch die Verwendung der System.Data.OleDb Anbieter die Namen der Parameter Es spielt keine Rolle mehr, aber Sie müssen sicherstellen, dass das Auftreten der Parameter mit der Reihenfolge übereinstimmt, in der die Parameterobjekte der Parameterobjektsammlung des Befehlsobjekts hinzugefügt werden.

EDIT: Wenn Sie die @ als Parameter Platzhalter halten möchten, können Sie dies einfach ändern:

DbProviderFactory dbFactory = DbProviderFactories.GetFactory("System.Data.OleDb"); 

zu

DbProviderFactory dbFactory = DbProviderFactories.GetFactory("System.Data.SqlClient"); 
+1

Das habe ich versucht zu beantworten, aber auf einmal war der Beitrag wieder im Originalzustand, ohne Kommentare oder Antworten! – Nilesh

+0

Wie wäre es mit 'OdbcCommand'? –

+0

@Nilesh Die Antwort wurde vom Besitzer gelöscht, ich bin nur glücklich, Ihren Link zu sehen –

0

bereiten und lassen Sie mich wissen, ob es funktioniert.

DbParameter param1 = dbCommand.CreateParameter(); 
param1.ParameterName.AddWithValue("@Name", Textbox1.Text); 

oder

DbParameter param1 = dbCommand.CreateParameter(); 
param1.SelectCommand.Parameters.AddWithValue("@Name", Textbox1.Text); 
Verwandte Themen