Параметры ADO.NET из TextBox - PullRequest
       199

Параметры ADO.NET из TextBox

0 голосов
/ 28 апреля 2010

Я пытаюсь вызвать параметризованную хранимую процедуру из SQL Server 2005 в моем приложении C # Winforms. Я добавляю параметры из TextBoxeslike так (их 88):

cmd.Parameters.Add("@CustomerName", SqlDbType.VarChar, 100).Value = CustomerName.Text;

Я получаю следующее исключение:

"System.InvalidCastException: Failed to convert parameter value
 from a TextBox to a String. ---> System.InvalidCastException:
 Object must implement IConvertible."

Строка, выдающая ошибку, - это когда я вызываю запрос:

cmd.ExecuteNonQuery();

Я также попытался использовать метод .ToString () в TextBoxes, который в любом случае казался бессмысленным, и выдал ту же ошибку. Я неправильно передаю параметры?

Ответы [ 3 ]

6 голосов
/ 28 апреля 2010

Возможно, вы забыли указать свойство Text при назначении одного из значений вашего параметра.

Например, вместо:

CustomerName.Text

Возможно, вы только что сделали:

CustomerName

Это было бы легко пропустить, если их 88.

1 голос
/ 28 апреля 2010

Я подозреваю, что вы где-то пропустили .Text, но вы говорите, что сделали ToString для всех значений параметров, что кажется странным. В любом случае вы можете использовать следующий фрагмент кода для вывода имен параметров и имени типа значения, это может помочь определить проблемный параметр.

foreach (SqlParameter param in cmd.Parameters)
{
  System.Diagnostics.Debug.WriteLine(string.Format("{0}:{1}", param.ParameterName, param.Value == null ? "NULL" : param.Value.GetType().Name));
}

Вы должны получить что-то вроде следующего в окне отладки, в этом случае CustomerSurname - это параметр, который имеет текстовое поле, а не строку в качестве примера.

@CustomerName:String
@CustomerSurname:TextBox
...
0 голосов
/ 28 апреля 2010

попробуйте что-то вроде этого:

SqlParameter sqlParam= new SqlParameter();
sqlParam.ParameterName = "@customerName";
sqlParam.Direction = ParameterDirection.Input;
sqlParam.SqlDbType = SqlDbType.VarChar;
sqlParam.Size = 100;
sqlParam.Value = customername.Text;
cmd.Parameters.Add(sqlParam);
...