oledb param type question - PullRequest
       11

oledb param type question

0 голосов
/ 15 мая 2011

Я пытаюсь выделить текст из текстового поля и передать его как один из параметров команды oledb, но появляется это сообщение об ошибке;

"OleDbParameterCollection принимает только объекты типа OleDbParameter, отличные от NULL, а не объекты String"

Вот мой код:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=EstateAgent.mdb;Persist Security Info=True";
            string sqlStatement = "INSERT INTO `house` (`ID`, `County`, `Town`, `Village`, `PropertyType`, `Bedrooms`, `Price`, `EstateAgent`, `Keyword`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";

            OleDbConnection myConnection = new OleDbConnection(connectionString);
            OleDbCommand myAccessCommand = new OleDbCommand(sqlStatement);

           // System.Data.OleDb.OleDbParameter param;

            myAccessCommand.Connection = myConnection;

            for (int i = 0; i < 9; i++)
            {
                myAccessCommand.Parameters.Add(textBoxControlArray[i].Text);
            }

            myConnection.Open();
            myAccessCommand.ExecuteNonQuery();
            myConnection.Close();

Любые другие замечания, которые вы видите, будут оценены, это моя первая работа с использованием базы данных в c #.

Обратите внимание, у меня есть массив controlbox из 9 текстовых полей, которые все должны быть заполнены для выполнения этого раздела кода.

Спасибо

Ответы [ 3 ]

3 голосов
/ 15 мая 2011

Обычно вы добавляете строковый объект в метод, который ожидает объект OleDBParameter.

myAccessCommand.Parameters.Add(textBoxControlArray[i].Text);

Возможно, вы захотите сделать что-то вроде

myAccessCommand.Parameters.Add(new OleDBParameter(textBoxControlArray[i].Name, textBoxControlArray[i].Text);

Здесь каждое текстовое поле должно называться так же, как параметры, указанные воригинальный запрос.

0 голосов
/ 15 мая 2011

Используйте это внутри цикла for.

        for (int i = 0; i < 9; i++)
        {
            OleDbParameter op = new OleDbParameter("OP", OleDbType.VarChar, 50);
            op.Value = textBoxControlArray[i].Text;
            myAccessCommand.Parameters.Add(op);
        }
0 голосов
/ 15 мая 2011

Может использовать из него:

      string sqlStatement = "INSERT INTO house (ID, County, Town, Village, PropertyType, Bedrooms, Price, EstateAgent, Keyword) VALUES (@ID, @County, @Town, @Village,@PropertyType, @Bedrooms, @Price, @EstateAgent, @Keyword)"; 

myAccessCommand.Parameters.AddWithValue ("@ price", txtPrice.Text);

...