C# 如何将数据从DataTable插入Oracle数据库表:
我在C# 如何将数据从DataTable插入Oracle数据库表:,c#,asp.net,C#,Asp.net,我在DataTable中有两行三列的数据。我想将该数据插入到Oracle表中 如何插入?请给我举个例子 而且 如何将datatable传递到ORACLE中的StoredProcess 我以如下方式传递数据表,但数据表类型问题正在出现。我怎样才能解决这个问题 cmd.Parameters.Add("@Details",dtSupplier); (OR) cmd.Parameters.Add("Details", DbType.Single).Value = dtSupplier.ToSt
DataTable
中有两行三列的数据。我想将该数据插入到Oracle
表中
如何插入?请给我举个例子
而且
如何将datatable传递到ORACLE中的StoredProcess
我以如下方式传递数据表,但数据表类型问题正在出现。我怎样才能解决这个问题
cmd.Parameters.Add("@Details",dtSupplier);
(OR)
cmd.Parameters.Add("Details", DbType.Single).Value = dtSupplier.ToString();
最好的办法是遵循下面提到的步骤
最好的办法是遵循下面提到的步骤
关于你问题的这一部分: cmd.Parameters.Add(“@Details”,dtSupplier)
(或)
cmd.Parameters.Add(“Details”,DbType.Single).Value=dtSupplier.ToString() “详细信息”参数的类型是什么?是单人房吗?然后,您必须从数据表中选择一(1)个值并将其传递给参数,例如dtSupplier.Rows[0][“col”]。
如果您使用dtSupplier.ToString(),您只是在生成整个DataTable的字符串(我猜它将始终是DataTable的类型名称)。关于问题的这一部分: cmd.Parameters.Add(“@Details”,dtSupplier)
(或)
cmd.Parameters.Add(“Details”,DbType.Single).Value=dtSupplier.ToString() “详细信息”参数的类型是什么?是单人房吗?然后,您必须从数据表中选择一(1)个值并将其传递给参数,例如dtSupplier.Rows[0][“col”]。
如果您使用dtSupplier.ToString(),您只是在生成整个DataTable的字符串(我猜它将始终是DataTable的类型名)。要将dataset或DataTable插入ORACLE
OracleDataAdapter da = new OracleDataAdapter();
OracleCommand cmdOra = new OracleCommand(StoredProcedureName, Connection);
cmdOra.CommandType = CommandType.StoredProcedure;
da.InsertCommand = cmdOra;
da.Update(dsDataSet);
或
如果上述方法不起作用,则将datatable作为xml参数传递,而不是处理它
详情请参阅:
或
在Oracle站点上检查此线程:
检查现有答案:要将数据集或数据表插入ORACLE
OracleDataAdapter da = new OracleDataAdapter();
OracleCommand cmdOra = new OracleCommand(StoredProcedureName, Connection);
cmdOra.CommandType = CommandType.StoredProcedure;
da.InsertCommand = cmdOra;
da.Update(dsDataSet);
或
如果上述方法不起作用,则将datatable作为xml参数传递,而不是处理它
详情请参阅:
或
在Oracle站点上检查此线程:
检查现有答案:首先,您需要添加
Oracle.DataAccess.dll
作为Visual Studio中的参考。在大多数情况下,您可以在目录C:\ProgramData\Oracle11g\product\11.2.0\client\u 1\ODP.NET\bin\2.x\Oracle.DataAccess.dll
如果只需要将记录从DataTable插入到Oracle表,那么可以调用下面的函数。考虑您的DATABATE名称是“代码> Dt< /Calp>”< /P>
string error = "";
int noOfInserts = DataTableToTable(dt,out error);
1。不使用Oracle参数(特殊字符非安全)
下面给出了该函数的定义。这里,我们只是将查询动态化,以便将其作为sql语句传递给InsertWithQuery
函数
public int DataTableToTable(DataTable dt,out string error)
{
error = "";
for (int i = 0; i < dt.Rows.Count; i++)
{
finalSql = "INSERT INTO TABLENAME SELECT ";
for (int j = 0; j < dt.Columns.Count; j++)
{
colValue += "'" + dt.Rows[i][j].ToString() + "',";
}
colValue = colValue.Remove(colValue.Length - 1, 1);
finalSql += colValue + " FROM DUAL";
InsertWithQuery(finalSql, out error);
if (error != "")
return error;
inserts++;
colValue = "";
}
}
2。使用Oracle参数(特殊字符安全)
这可以处理特殊字符,例如列值中的单引号场景
public int DataTableToTable(DataTable dt,out string error)
{
error = "";
string finalSql = "";
List<string> colValue = new List<string>();
List<string> cols = new List<string>() {"COLUMN1","COLUMN2","COLUMN3"};
for (int i = 0; i < dt.Rows.Count; i++)
{
finalSql = "INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3) VALUES(:COLUMN1,:COLUMN2,:COLUMN3) ";
for (int j = 0; j < dt.Columns.Count; j++)
{
colValue.Add(dt.Rows[i][j].ToString());
}
objDAL.InsertWithParams(finalSql,colValue,cols, out error);
if (error != "")
return error;
inserts++;
colValue.Clear();
}
}
首先,您需要在VisualStudio中添加
Oracle.DataAccess.dll
作为引用。在大多数情况下,您可以在目录C:\ProgramData\Oracle11g\product\11.2.0\client\u 1\ODP.NET\bin\2.x\Oracle.DataAccess.dll
如果只需要将记录从DataTable插入到Oracle表,那么可以调用下面的函数。考虑您的DATABATE名称是“代码> Dt< /Calp>”< /P>
string error = "";
int noOfInserts = DataTableToTable(dt,out error);
1。不使用Oracle参数(特殊字符非安全)
下面给出了该函数的定义。这里,我们只是将查询动态化,以便将其作为sql语句传递给InsertWithQuery
函数
public int DataTableToTable(DataTable dt,out string error)
{
error = "";
for (int i = 0; i < dt.Rows.Count; i++)
{
finalSql = "INSERT INTO TABLENAME SELECT ";
for (int j = 0; j < dt.Columns.Count; j++)
{
colValue += "'" + dt.Rows[i][j].ToString() + "',";
}
colValue = colValue.Remove(colValue.Length - 1, 1);
finalSql += colValue + " FROM DUAL";
InsertWithQuery(finalSql, out error);
if (error != "")
return error;
inserts++;
colValue = "";
}
}
2。使用Oracle参数(特殊字符安全)
这可以处理特殊字符,例如列值中的单引号场景
public int DataTableToTable(DataTable dt,out string error)
{
error = "";
string finalSql = "";
List<string> colValue = new List<string>();
List<string> cols = new List<string>() {"COLUMN1","COLUMN2","COLUMN3"};
for (int i = 0; i < dt.Rows.Count; i++)
{
finalSql = "INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3) VALUES(:COLUMN1,:COLUMN2,:COLUMN3) ";
for (int j = 0; j < dt.Columns.Count; j++)
{
colValue.Add(dt.Rows[i][j].ToString());
}
objDAL.InsertWithParams(finalSql,colValue,cols, out error);
if (error != "")
return error;
inserts++;
colValue.Clear();
}
}
试试看{
//假设您有DataTable dt
字符串连接字符串=@“Provider=Microsoft.ACE.OLEDB.12.0;”+
@“Data Source='此处给出access数据库文件的路径';Persist Security Info=False”;
OLEDB连接dbConn=新的OLEDB连接(connectionString);
dbConn.Open();
使用(dbConn)
{
int j=0;
对于(int i=0;i<2;i++)
{
OleDbCommand cmd=新的OleDbCommand(
“将值(@c1、@c2、@c3)插入参与者_档案([column1]、[column2]、[column3]),dbConn);
cmd.Parameters.AddWithValue(“@c1”,dt.rows[i][j].ToString());
cmd.Parameters.AddWithValue(“@c2”,dt.rows[i][j].ToString());
cmd.Parameters.AddWithValue(“@c3”,dt.rows[i][j].T