我想将数据从excel插入到ORACLE,但是它不起作用。谁能帮助我?谢谢大家! 这是我的控制器代码
DataTable dt = ds.Tables [0];
OracleConnection oraclecon = (OracleConnection)db.Database.Connection;
// create command and set properties
OracleCommand cmd = oraclecon.CreateCommand() as OracleCommand;
oraclecon.Open();
string[] MA_TB = new string[dt.Rows.Count];
string[] GHICHU = new string[dt.Rows.Count];
for (int j = 0; j < dt.Rows.Count; j++)
{
MA_TB[j] = Convert.ToString(dt.Rows[j]["MA_TB"]);
GHICHU[j] = Convert.ToString(dt.Rows[j]["GHICHU"]);
}
OracleParameter mA_TB = new OracleParameter();
mA_TB.OracleDbType = OracleDbType.Varchar2;
mA_TB.Value = MA_TB;
OracleParameter gHICHU = new OracleParameter();
gHICHU.OracleDbType = OracleDbType.Varchar2;
gHICHU.Value = GHICHU;
cmd.CommandText = "INSERT INTO CSKH_IMPTEST_07052019 (ma_tb,ghichu) VALUES (:2, :3)";
cmd.Parameters.Add(mA_TB);
cmd.Parameters.Add(gHICHU);
cmd.ExecuteNonQuery();
oraclecon.Close();
答案 0 :(得分:0)
这是因为您已将整个字符串数组分配给了数据库参数:
string[] MA_TB = new string[dt.Rows.Count];
…
mA_TB.Value = MA_TB;
…
cmd.Parameters.Add(mA_TB);
不仅仅是数组中的字符串值之一。这意味着您将插入System.String[]
作为“字符串”,而不是"Hello World"
或其他名称。发生这种情况的原因是,当您调用Convert.ToString(someobject)
时,将在内部调用someobject.ToString()
。在没有任何覆盖方法的情况下(并且字符串数组将没有任何覆盖),将调用默认的ToString()
,并且所有操作都会返回对象类型的名称-在这种情况下为字符串数组
选择数组项之一作为参数值:
mA_TB.Value = MA_TB[0];
或者如果您想全部使用它们,例如用逗号分隔,将它们连成一个字符串:
mA_TB.Value = String.Join(",", MA_TB);
编辑:
将dt中的所有行插入到数据库中,让我们使用这些应该被使用的东西(设置命令和参数,重复更改参数的值并执行)。
DataTable dt = ds.Tables[0];
OracleConnection oraclecon = (OracleConnection)db.Database.Connection;
// create command and set properties
OracleCommand cmd = oraclecon.CreateCommand() as OracleCommand;
cmd.CommandText = "INSERT INTO CSKH_IMPTEST_07052019 (ma_tb,ghichu) VALUES (:2, :3)";
OracleParameter mA_TB = new OracleParameter();
mA_TB.OracleDbType = OracleDbType.Varchar2;
cmd.Parameters.Add(mA_TB);
OracleParameter gHICHU = new OracleParameter();
gHICHU.OracleDbType = OracleDbType.Varchar2;
cmd.Parameters.Add(gHICHU);
oraclecon.Open();
foreach(DataRow ro in dt.Rows)
{
mA_TB.Value = ro["MA_TB"].ToString();
gHICHU.Value = ro["GHICHU"].ToString();
cmd.ExecuteNonQuery();
}
oraclecon.Close();
答案 1 :(得分:0)
我有一个与Epplus和Entity Framework相似的任务,通过遍历Excel表并创建新对象,然后将它们添加到数据库中来完成。 互联网上有很多例子。
Epplus的示例:
public ActionResult Import(HttpPostedFileBase upload)
{
var users = new List<User>();
var excelPackage = new ExcelPackage(upload.InputStream);
// Reading the first worksheet
var worksheet = excelPackage.Workbook.Worksheets[1];
// Number of rows and columns
int totalRows = worksheet.Dimension.Rows;
int totalCols = expectedHeaders.Count();
for (int row = 1; row <= totalRows; row++)
{
// Filling variables or creating objects
var Name = worksheet.Cells[row, 1].Text;
...
}
...
}
然后,您可以遍历列表,在其中可以将项目添加到数据库中。