2013-08-20 11 views
6

Potrzebuję polecenia aktualizacji z parametrami iz jakichś powodów nie mogę używać procedur przechowywanych, faktycznie generujemy polecenie aktualizacji w zależności od bazy danych, tabeli i kolumn, używamy następujących formularzy:Wyjątek w Dodaj parametr do 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(); 

Ale jest wyjątek:

Musi zadeklarować zmienną skalarną "@name"

gdzie jest problem w tym dorsza mi? Czy ktoś ma pomysł na ten temat?

+0

W tym momencie pan kojarzy polecenia z połączeniem? Czy fabryka to zrobiła? Ponadto, w jakiej linii otrzymujesz wyjątek? – Renan

+0

@Nilesh Daj mi ten [link] (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx) To jest odpowiedź, ale co powiedzieć na polecenie 'Odbc', czy to działa jak 'Oledb'? –

Odpowiedz

5

Jak używasz System.Data.OleDb jako dostawcy bazy danych (niezależnie używasz serwera SQL) trzeba użyć ? jako zastępczy parametrów jak:

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

za pomocą dostawcy System.Data.OleDb nazwy parametrów to już nie ma znaczenia, ale musisz upewnić się, że pojawienie się parametrów pasuje do kolejności, w której parametry parametru są dodawane do zbioru parametrów obiektów poleceń.

EDIT: Jeśli chcesz zachować @ jako parametr zastępczy można po prostu zmienić:

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

do

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

Oto, co próbowałem odpowiedzieć, ale nagle post powrócił do pierwotnego stanu, bez komentarzy i odpowiedzi! – Nilesh

+0

Co powiecie na 'OdbcCommand'? –

+0

@Nilesh Odpowiedź została usunięta przez właściciela, po prostu mam szczęście, że zobaczyłem twój link –

0

Spróbuj to i daj mi znać, czy działa.

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

lub

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