根据另一个表C#将数据插入表

时间:2011-11-27 15:00:50

标签: c# sql database insert oledb

我编写了一些代码,它从一个表中获取一些值并使用这些值插入另一个表。(不仅仅是这些值,还有这些值(这些值=基于表的值))

我收到此错误:

  

System.Data.OleDb.OleDbException(0x80040E10):不为一个或多个必需参数赋值。

这是代码。我不知道我错过了什么。

string selectedItem = comboBox1.SelectedItem.ToString();
Codons cdn = new Codons(selectedItem);
string codon1;
int index;

if (this.i != this.counter)
{
  //take from the DataBase the matching codonsCodon1 to codonsFullName
  codon1 = cdn.GetCodon1();

  //take the serialnumber of the last protein
  string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
         "Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
  OleDbConnection conn = new OleDbConnection(connectionString);
  conn.Open();
  string last= "SELECT proInfoSerialNum FROM tblProInfo WHERE proInfoScienceName = "+this.name ;
  OleDbCommand getSerial = new OleDbCommand(last, conn);
  OleDbDataReader dr = getSerial.ExecuteReader();
  dr.Read();
  index = dr.GetInt32(0);

  //add the amino acid to tblOrderAA
  using (OleDbConnection connection = new OleDbConnection(connectionString))
  {
    string insertCommand = "INSERT INTO tblOrderAA(orderAASerialPro, orderAACodon1) "
           + " values (?, ?)";
    using (OleDbCommand command = new OleDbCommand(insertCommand, connection))
    {
      connection.Open();
      command.Parameters.AddWithValue("orderAASerialPro", index);
      command.Parameters.AddWithValue("orderAACodon1", codon1);
      command.ExecuteNonQuery();
    }
  }
}

编辑:我在该行之后放了一个消息框:

index = dr.GetInt32(0);

看看问题出在哪里,我之前得到了错误。我没有看到消息框

2 个答案:

答案 0 :(得分:1)

您的SELECT命令中包含语法错误,因为您没有用引号将其括起来。

改变这个:

string last = "SELECT proInfoSerialNum FROM tblProInfo WHERE proInfoScienceName = "+this.name ;
OleDbCommand getSerial = new OleDbCommand(last, conn);
OleDbDataReader dr = getSerial.ExecuteReader();

string last = "SELECT proInfoSerialNum FROM tblProInfo WHERE proInfoScienceName = ?";
OleDbCommand getSerial = new OleDbCommand(last, conn);
getSerial.Parameters.AddWithValue("?", this.name);
OleDbDataReader dr = getSerial.ExecuteReader();

答案 1 :(得分:0)

此代码来自here

string SqlString = "Insert Into Contacts (FirstName, LastName) Values (?,?)";

using (OleDbConnection conn = new OleDbConnection(ConnString))
{
    using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
    {
       cmd.CommandType = CommandType.Text;
       cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text);
       cmd.Parameters.AddWithValue("LastName", txtLastName.Text);
       conn.Open();
       cmd.ExecuteNonQuery();
    }
}

尝试按照示例中的相同操作。