【发布时间】:2026-01-15 18:35:01
【问题描述】:
我想在按钮单击时从 Gridview 向数据库中插入记录。
所以我使用this链接插入它。
但是使用下面的代码,我得到了错误
无效的参数绑定\r\n参数名称:System.DateTime
<asp:GridView ID="grdExcelData" runat="server" AutoGenerateColumns="false" AllowPaging="true" PageSize="10" PageIndex="0" CssClass="table table-bordered">
<Columns>
<asp:BoundField ItemStyle-Width="50px" DataField="R4GSTATE" HeaderText="R4GSTATE" />
<asp:BoundField ItemStyle-Width="50px" DataField="POLITICAL_STATE_NAME" HeaderText="POLITICAL_STATE_NAME" />
<asp:BoundField ItemStyle-Width="50px" DataField="POLITICAL_STATE_CODE" HeaderText="POLITICAL_STATE_CODE" />
<asp:BoundField ItemStyle-Width="50px" DataField="CMP" HeaderText="CMP" />
<asp:BoundField ItemStyle-Width="50px" DataField="SAP_ID" HeaderText="SAP_ID" />
<asp:BoundField ItemStyle-Width="50px" DataField="SITE_NAME" HeaderText="SITE_NAME" />
<asp:BoundField ItemStyle-Width="50px" DataField="RFCDATE" HeaderText="RFCDATE" />
<asp:BoundField ItemStyle-Width="50px" DataField="RFS_DATE" HeaderText="RFS_DATE" />
<asp:BoundField ItemStyle-Width="50px" DataField="RFE1_DATE" HeaderText="RFE1_DATE" />
<asp:BoundField ItemStyle-Width="50px" DataField="SITE_DROP_DATE" HeaderText="SITE_DROP_DATE" />
<asp:BoundField ItemStyle-Width="50px" DataField="INFRA_PROVIDER" HeaderText="INFRA_PROVIDER" />
<asp:BoundField ItemStyle-Width="50px" DataField="IP_COLO_SITEID" HeaderText="IP_COLO_SITEID" />
<asp:BoundField ItemStyle-Width="50px" DataField="VENDOR_CODE" HeaderText="VENDOR_CODE" />
<asp:BoundField ItemStyle-Width="50px" DataField="MW_INSTALLED" HeaderText="MW_INSTALLED" />
<asp:BoundField ItemStyle-Width="50px" DataField="DG_NONDG" HeaderText="DG_NONDG" />
<asp:BoundField ItemStyle-Width="50px" DataField="EB_NONEB" HeaderText="EB_NONEB" />
<asp:BoundField ItemStyle-Width="50px" DataField="TOWER_TYPE" HeaderText="TOWER_TYPE" />
<asp:BoundField ItemStyle-Width="50px" DataField="ID_OD_COUNTCHANGE" HeaderText="ID_OD_COUNTCHANGE" />
<asp:BoundField ItemStyle-Width="50px" DataField="ID_OD_CHANGEDDATE" HeaderText="ID_OD_CHANGEDDATE" />
<asp:BoundField ItemStyle-Width="50px" DataField="RRH_COUNTCHANGE" HeaderText="RRH_COUNTCHANGE" />
<asp:BoundField ItemStyle-Width="50px" DataField="IP_COLO_SITEID" HeaderText="IP_COLO_SITEID" />
<asp:BoundField ItemStyle-Width="50px" DataField="RRH_CHANGEDDATE" HeaderText="RRH_CHANGEDDATE" />
<asp:BoundField ItemStyle-Width="50px" DataField="TENANCY_COUNTCHANGE" HeaderText="TENANCY_COUNTCHANGE" />
<asp:BoundField ItemStyle-Width="50px" DataField="TENANCY_CHANGEDDATE" HeaderText="TENANCY_CHANGEDDATE" />
</Columns>
</asp:GridView>
Server code
protected void btnSubmitUpload_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
ViewState["GridData"] = SelectedRecordID;
dt = ViewState["GridData"] as DataTable;
if (dt.Rows.Count > 0)
{
string consString = ConfigurationManager.ConnectionStrings["ConnectionString_IPCOLO"].ConnectionString;
using (OracleConnection con = new OracleConnection(consString))
{
con.Open();
using (OracleBulkCopy sqlBulkCopy = new OracleBulkCopy(con))
{
sqlBulkCopy.DestinationTableName = "TBL_IPCOLO_BILLING_MST";
sqlBulkCopy.ColumnMappings.Add("R4GSTATE", "R4GSTATE");
sqlBulkCopy.ColumnMappings.Add("POLITICAL_STATE_NAME", "POLITICAL_STATE_NAME");
sqlBulkCopy.ColumnMappings.Add("POLITICAL_STATE_CODE", "POLITICAL_STATE_CODE");
sqlBulkCopy.ColumnMappings.Add("CMP", "CMP");
sqlBulkCopy.ColumnMappings.Add("SAP_ID", "SAP_ID");
sqlBulkCopy.ColumnMappings.Add("SITE_NAME", "SITE_NAME");
sqlBulkCopy.ColumnMappings.Add("RFCDATE", "RFCDATE");
sqlBulkCopy.ColumnMappings.Add("RFS_DATE", "RFS_DATE");
sqlBulkCopy.ColumnMappings.Add("RFE1_DATE", "RFE1_DATE");
sqlBulkCopy.ColumnMappings.Add("SITE_DROP_DATE", "SITE_DROP_DATE");
sqlBulkCopy.ColumnMappings.Add("INFRA_PROVIDER", "INFRA_PROVIDER");
sqlBulkCopy.ColumnMappings.Add("IP_COLO_SITEID", "IP_COLO_SITEID");
sqlBulkCopy.ColumnMappings.Add("VENDOR_CODE", "VENDOR_CODE");
sqlBulkCopy.ColumnMappings.Add("MW_INSTALLED", "MW_INSTALLED");
sqlBulkCopy.ColumnMappings.Add("DG_NONDG", "DG_NONDG");
sqlBulkCopy.ColumnMappings.Add("EB_NONEB", "EB_NONEB");
sqlBulkCopy.ColumnMappings.Add("TOWER_TYPE", "TOWER_TYPE");
sqlBulkCopy.ColumnMappings.Add("ID_OD_COUNTCHANGE", "ID_OD_COUNTCHANGE");
sqlBulkCopy.ColumnMappings.Add("ID_OD_CHANGEDDATE", "ID_OD_CHANGEDDATE");
sqlBulkCopy.ColumnMappings.Add("RRH_COUNTCHANGE", "RRH_COUNTCHANGE");
sqlBulkCopy.ColumnMappings.Add("IP_COLO_SITEID", "IP_COLO_SITEID");
sqlBulkCopy.ColumnMappings.Add("RRH_CHANGEDDATE", "RRH_CHANGEDDATE");
sqlBulkCopy.ColumnMappings.Add("EB_NONEB", "EB_NONEB");
sqlBulkCopy.ColumnMappings.Add("TENANCY_COUNTCHANGE", "TENANCY_COUNTCHANGE");
sqlBulkCopy.ColumnMappings.Add("TENANCY_CHANGEDDATE", "TENANCY_CHANGEDDATE");
sqlBulkCopy.WriteToServer(dt);
con.Close();
}
}
}
}
注意:除此之外,我还有几列我不想插入数据。请提出问题所在
【问题讨论】:
-
我认为 DataTable 中日期时间列的类型与日期的 Oracles 列类型不匹配。也许这个帖子有帮助:https://*.com/questions/15606925/c-sharp-datetime-changing-to-another-format
-
@Yosh:我在表中使用
date数据类型。我应该在哪里更改才能完成? -
@Yosh:删除触发器后它的工作,但这不是标准方式。有没有其他方法可以将 dt 插入到表中
-
啊,好的。 BulkCopy 不允许启用触发器(请参阅:docs.oracle.com/database/121/ODPNT/featBulkCopy.htm#ODPNT214)。也许在没有批量复制的情况下插入是一个更好的选择?!
标签: c# asp.net oracle gridview datatable