我是第一次使用C#,现在我尝试将数据从变量插入oracle db。但是我得到了这个错误。我不知道此源代码中的要点。
public class Foo
{
public string PLANTCODE { get; set; }
public string LOCATIONCODE { get; set; }
public string LOCATIONNAME { get; set; }
public string LOCATIONSTATUS { get; set; }
public string DEPARTMENTCODE { get; set; }
public string DEPARTMENTNAME { get; set; }
// public DateTime LASTUPDATED { get; set; }
// public OracleDbType OracleDbType { get; set; }
}
public List<Foo> GetData()
{
List<Foo> dataList = new List<Foo>();
string connectionString = "Data Source=xxx; Initial Catalog=xxx;Integrated Security = false; User ID=xxx;Password=xxx";
string selectStatement = "SELECT PLANTCODE,LOCATIONCODE,LOCATIONNAME,LOCATIONSTATUS,DEPARTMENTCODE,DEPARTMENTNAME from V_Location";
using (var con = new SqlConnection(connectionString))
{
using (var cmd = new SqlCommand(selectStatement, con))
{
con.Open();
using (var reader = cmd.ExecuteReader())
{ if (reader.Read())
{
dataList.Add(new Foo
{
PLANTCODE = reader.GetString(0),
LOCATIONCODE = reader.GetString(1),
LOCATIONNAME = reader.GetString(2),
LOCATIONSTATUS = reader.GetString(3),
DEPARTMENTCODE = reader.GetString(4),
DEPARTMENTNAME = reader.GetString(5),
});
}
}
}
}
return dataList;
}
public void InsertData()
{
string connectionString = "Provider=MSDAORA;Data Source=ORCL;Persist Security Info=True;User ID=xxx;Password=xxx;Unicode=True";
string insertStatment = "INSERT INTO xxx.BTH_V_LOCATION (PLANTCODE, LOCATIONCODE, LOCATIONNAME, LOCATIONSTATUS, DEPARTMENTCODE, DEPARTMENTNAME) VALUES (:PLANTCODE, :LOCATIONCODE, :LOCATIONNAME, :LOCATIONSTATUS, :DEPARTMENTCODE, :DEPARTMENTNAME)";
List<Foo> dataList = GetData();
if (dataList.Count > 0)
{
using (OleDbConnection con = new OleDbConnection(connectionString))
{
using (OleDbCommand cmd = new OleDbCommand(insertStatment, con))
{
con.Open();
foreach (var items in dataList)
{
cmd.Parameters.Clear();
cmd.Parameters.Add("PLANTCODE", OleDbType.VarChar).Value = items.PLANTCODE;
cmd.Parameters.Add("LOCATIONCODE", OleDbType.VarChar).Value = items.LOCATIONCODE;
cmd.Parameters.Add("LOCATIONNAME", OleDbType.VarChar).Value = items.LOCATIONNAME;
cmd.Parameters.Add("LOCATIONSTATUS", OleDbType.VarChar).Value = items.LOCATIONSTATUS;
cmd.Parameters.Add("DEPARTMENTCODE", OleDbType.VarChar).Value = items.DEPARTMENTCODE;
cmd.Parameters.Add("DEPARTMENTNAME", OleDbType.VarChar).Value = items.DEPARTMENTNAME;
}
cmd.ExecuteNonQuery();
}
}
}
}
private void button1_Click_1(object sender, EventArgs e)
{
InsertData();
}
}
}
此源代码首先从sql Server获取选择数据。之后,将数据保留在变量中以插入到oracle。现在,我尝试插入无变量,然后可以插入数据。但是如果我更改为按变量插入,但无法插入并出现此错误
ORA-01008:并非所有变量都绑定错误”在“ cmd.ExecuteNonQuery();]上”
我是第一次使用C#,现在我尝试将数据从变量插入oracle db。但是我得到了这个错误。我不知道此源代码中的要点。公共类Foo {公共字符串...
移动cmd.Parameters.clear();在循环之外。
非常感谢您的回答,但是我尝试移动cmd.Parameters.clear();。 ,我仍然遇到相同的错误。
现在我可以解决此问题,将参数名称更改为“?”
我认为您需要使用@
而不是:
作为参数。并且您需要在循环内执行并在执行后清除参数。