2010-12-17 3 views
1
Dim txtFName As TextBox = CType(Wizard1.FindControl("txtFName"), TextBox) 
Dim txtLName As TextBox = CType(Wizard1.FindControl("txtLName"), TextBox) 

Dim MyDbConnection As New SqlConnection(ConfigurationManager.ConnectionStrings.Item("Journeyeast Connection String").ToString) 
MyDbConnection.Open() 

Dim SQL = "INSERT INTO Registration(FName, LName) VALUES (@FName, @LName)" 

Dim MySqlCommand As New SqlCommand(SQL, MyDbConnection) 
MySqlCommand.Parameters.Add("@FName", SqlDbType.NChar, 10, txtFName.Text) 
MySqlCommand.Parameters.Add("@LName", SqlDbType.NChar, 10, txtLName.Text) 

MySqlCommand.ExecuteNonQuery() 

Я получаю следующее сообщение об ошибке:Почему я получаю сообщение об ошибке с параметризованным ADO-запросом?

The parameterized query '(@FName nchar(10),@LName nchar(10))INSERT INTO Registration(FNam' expects the parameter '@FName', which was not supplied.

Что я делаю неправильно?

BTW, я знаю nchar(10) не является хорошим выбором для имени и фамилии.

ответ

3

Потому что вы не указали значения параметров.

Взгляните:

Dim SQL = "INSERT INTO Registration(FName, LName) VALUES (@FName, @LName)" 

Dim MySqlCommand As New SqlCommand(SQL, MyDbConnection) 
MySqlCommand.Parameters.AddWithValue("@FName",txtFName.Text) 
MySqlCommand.Parameters.AddWithValue("@LName",txtLName.Text) 

MySqlCommand.ExecuteNonQuery() 

EDIT:

MySqlCommand.Parameters.Add("@FName", SqlDbType.NChar, 10).Value = txtFname.Text 
MySqlCommand.Parameters.Add("@LName", SqlDbType.NChar, 10).Value = txtFname.Text 
+1

Хм. Я думал, что это третий параметр. Так много перегруженных подводных лодок, я, должно быть, неправильно понял, что я прохожу. – ChadD 2010-12-17 04:24:12