oledb param类型问题

时间:2011-05-15 12:57:30

标签: c# oledb

我正在尝试从文本框中选择文本并将其作为oledb命令的参数之一传递,但会出现此错误消息;

“OleDbParameterCollection只接受非null的OleDbParameter类型对象,而不接受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#中使用数据库的第一项工作。

注意我有一个包含9个文本框的控件盒数组,所有这些文本框都必须填充,以便执行这部分代码。

由于

3 个答案:

答案 0 :(得分:3)

基本上,您在需要OleDBParameter对象的方法中添加字符串对象。

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

您可能想要做类似

的事情

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

此处每个文本框的名称应与原始查询中指定的参数相同。

答案 1 :(得分:0)

可以使用它:

      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( “@价格”,txtPrice.Text);

答案 2 :(得分:0)

在你的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);
        }