我正在使用Visual Studio 2010和SQL Server 2008.我想将数据保存到DataTable中的数据库。我有两个表Purchase_Master和Purchase_Detail。如下图所示
Create table Purchase_Master
(
PurchaseNo int Primary Key,
PDate nvarchar(50),
Total int,
OtherCharges int,
GrandTotal int
);
Create Table Purchase_Detail
(
ID int Identity(1,1) Primary Key,
PurchaseNo int,
Category nvarchar(50),
ItemCode nvarchar(50),
ItemName nvarchar(50),
Qty int,
Rate int,
Amount int,
FOREIGN KEY (PurchaseNo) REFERENCES Purchase_Master(PurchaseNo)
);
创建表我想保存输入gridview1的数据以保存在数据库表中。任何人都可以帮助我
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm6.aspx.cs" Inherits="Practice.WebForm6" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Purchase Order</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td><asp:Label ID="lblPurchaseNo" runat="server" Text="Purchase No:"></asp:Label></td>
<td><asp:TextBox ID="txtPurchaseNo" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td><asp:Label ID="lblDate" runat="server" Text="Date: "></asp:Label><sup class="required">*</sup></td>
<td><asp:TextBox ID="txtDate" runat="server"></asp:TextBox></td>
<td><asp:ImageButton ID="IbtnCalendar" runat="server" Height="25px" ImageUrl="~/Images/calendar.png" Width="30px" onclick="IbtnCalendar_Click"/>
<asp:Calendar ID="Calendar1" runat="server" Visible="False" onselectionchanged="Calendar1_SelectionChanged"></asp:Calendar></td>
</tr>
</table>
<br />
<asp:GridView ID="GridView1" runat="server" ShowFooter="True" AutoGenerateColumns="False" CellPadding="0" >
<Columns>
<asp:BoundField DataField="sr_no" HeaderText="Sr.No" />
<asp:TemplateField HeaderText="Category">
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem Value="-1">Select</asp:ListItem>
<asp:ListItem>Books</asp:ListItem>
<asp:ListItem>Electronics</asp:ListItem>
<asp:ListItem>Men</asp:ListItem>
<asp:ListItem>Women</asp:ListItem>
<asp:ListItem>Sports</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Item Code">
<ItemTemplate>
<asp:TextBox ID="txtItemCode" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Item Name">
<ItemTemplate>
<asp:TextBox ID="txtItemName" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Quantity">
<ItemTemplate>
<asp:TextBox ID="txtQty" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Rate">
<ItemTemplate>
<asp:TextBox ID="txtRate" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Amount" FooterStyle-HorizontalAlign="Right">
<FooterTemplate>
<asp:Button ID="ButtonAdd" runat="server"
Text="Add New Row" onClick="ButtonAdd_Click" />
</FooterTemplate>
<ItemTemplate>
<asp:TextBox ID="txtAmt" runat="server" ></asp:TextBox>
</ItemTemplate>
<FooterStyle HorizontalAlign="Right"></FooterStyle>
</asp:TemplateField>
</Columns> </asp:GridView> <table align="center">
<tr>
<td><asp:Label ID="lblTotal" runat="server" Text="Total: "></asp:Label><sup class="required">*</sup></td>
<td><asp:TextBox ID="txtTotal" runat="server"></asp:TextBox> </td>
</tr>
<tr>
<td><asp:Label ID="lblOtherCharges" runat="server" Text="Other Charges: "></asp:Label><sup class="required">*</sup></td>
<td><asp:TextBox ID="txtOtherCharges" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td><asp:Label ID="lblGrandTotal" runat="server" Text="Grand Total: "></asp:Label><sup class="required">*</sup></td>
<td><asp:TextBox ID="txtGrandTotal" runat="server"></asp:TextBox> </td>
</tr>
<tr><td><asp:Button ID="btnSubmit" runat="server" Text="Submit"
onclick="btnSubmit_Click" /></td> </tr>
<asp:Label ID="Label1" runat="server" Text=></asp:Label>
</table>
这是aspx.cs
public partial class WebForm6 : System.Web.UI.Page
{
private ArrayList GetDummyData()
{
ArrayList arr = new ArrayList();
arr.Add(new ListItem("Books", "1"));
arr.Add(new ListItem("Electronics", "2"));
arr.Add(new ListItem("Men", "3"));
arr.Add(new ListItem("Women", "4"));
arr.Add(new ListItem("Sports", "5"));
return arr;
}
private void FillDropDownList(DropDownList ddl)
{
ArrayList arr = GetDummyData();
foreach (ListItem item in arr)
{
ddl.Items.Add(item);
}
}
private int numOfRows = 1;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginConnectionString"].ConnectionString);
private void SetInitialRow()
{
DataTable dt = new DataTable();
DataRow dr = null;
dt.TableName = "CurrentTable";
dt.Columns.Add(new DataColumn("sr_no", typeof(string)));
dt.Columns.Add(new DataColumn("Category", typeof(string)));
dt.Columns.Add(new DataColumn("ItemCode", typeof(string)));
dt.Columns.Add(new DataColumn("ItemName", typeof(string)));
dt.Columns.Add(new DataColumn("Qty", typeof(string)));
dt.Columns.Add(new DataColumn("Rate", typeof(string)));
dt.Columns.Add(new DataColumn("Amt", typeof(string)));
dr = dt.NewRow();
dr["sr_no"] = 1;
dr["Category"] = string.Empty;
dr["ItemCode"] = string.Empty;
dr["ItemName"] = string.Empty;
dr["Qty"] = string.Empty;
dr["Rate"] = string.Empty;
dr["Amt"] = string.Empty;
dt.Rows.Add(dr);
//Store the DataTable in ViewState
ViewState["CurrentTable"] = dt;
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void IbtnCalendar_Click(object sender, ImageClickEventArgs e)
{
Calendar1.Visible = true;
}
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
txtDate.Text = Calendar1.SelectedDate.ToString("dd/MM/yyyy");
Calendar1.Visible = false;
}
private void AddNewRowToGrid()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
//extract the TextBox values
DropDownList dd1 = (DropDownList)GridView1.Rows[rowIndex].Cells[1].FindControl("DropDownList1");
TextBox box1 = (TextBox)GridView1.Rows[rowIndex].Cells[2].FindControl("txtItemCode");
TextBox box2 = (TextBox)GridView1.Rows[rowIndex].Cells[3].FindControl("txtItemName");
TextBox box3 = (TextBox)GridView1.Rows[rowIndex].Cells[4].FindControl("txtQty");
TextBox box4 = (TextBox)GridView1.Rows[rowIndex].Cells[5].FindControl("txtRate");
TextBox box5 = (TextBox)GridView1.Rows[rowIndex].Cells[6].FindControl("txtAmt");
drCurrentRow = dtCurrentTable.NewRow();
//sc.Add(dd1.Text + "," + box1.Text+","+box2.Text+","+box3.Text+","+box4.Text+","+box5.Text);
drCurrentRow["sr_no"] = i + 1;
FillDropDownList(dd1);
drCurrentRow["ItemCode"] = box1.Text;
drCurrentRow["ItemName"] = box2.Text;
drCurrentRow["Qty"] = box3.Text;
drCurrentRow["Rate"] = box4.Text;
drCurrentRow["Amt"] = box5.Text;
rowIndex++;
}
//add new row to DataTable
dtCurrentTable.Rows.Add(drCurrentRow);
//Store the current data to ViewState
ViewState["CurrentTable"] = dtCurrentTable;
//Rebind the Grid with the current data
GridView1.DataSource = dtCurrentTable;
GridView1.DataBind();
}
}
else
{
Response.Write("ViewState is null");
}
//Set Previous Data on Postbacks
SetPreviousData();
}
private void SetPreviousData()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
{
for (int i = 1; i < dt.Rows.Count; i++)
{
DropDownList dd1 = (DropDownList)GridView1.Rows[rowIndex].Cells[1].FindControl("DropDownList1");
TextBox box1 = (TextBox)GridView1.Rows[rowIndex].Cells[2].FindControl("txtItemCode");
TextBox box2 = (TextBox)GridView1.Rows[rowIndex].Cells[3].FindControl("txtItemName");
TextBox box3 = (TextBox)GridView1.Rows[rowIndex].Cells[4].FindControl("txtQty");
TextBox box4 = (TextBox)GridView1.Rows[rowIndex].Cells[5].FindControl("txtRate");
TextBox box5 = (TextBox)GridView1.Rows[rowIndex].Cells[6].FindControl("txtAmt");
FillDropDownList(dd1);
box1.Text = dt.Rows[i]["ItemCode"].ToString();
box2.Text = dt.Rows[i]["ItemName"].ToString();
box3.Text = dt.Rows[i]["Qty"].ToString();
box4.Text = dt.Rows[i]["Rate"].ToString();
box5.Text = dt.Rows[i]["Amt"].ToString();
rowIndex++;
}
}
}
}
protected void txtQty_TextChanged(object sender, EventArgs e)
{
// if(txtQty.Text == null)
// {
//txtAmount.Text = Convert.ToString(Convert.ToDouble(txtQty.Text) * Convert.ToDouble(txtRate.Text));
// }
}
protected void ButtonAdd_Click(object sender, EventArgs e)
{
AddNewRowToGrid();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SetInitialRow();
}
}
private void BulkInsertToDataBase()
{
try
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginConnectionString"].ConnectionString);
con.Open();
//creating object of SqlBulkCopy
//SqlBulkCopy objbulk = new SqlBulkCopy(con);
using (var objbulk = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.KeepIdentity))
{
//assigning Destination table name
objbulk.DestinationTableName = "Purchase_Detail";
foreach (DataColumn col in dt.Columns)
{
//Mapping Table column
objbulk.ColumnMappings.Add("sr_no", "PurchaseNo");
objbulk.ColumnMappings.Add("Category", "Category");
objbulk.ColumnMappings.Add("ItemCode", "ItemCode");
objbulk.ColumnMappings.Add("ItemName", "ItemName");
objbulk.ColumnMappings.Add("Qty", "Qty");
objbulk.ColumnMappings.Add("Rate", "Rate");
objbulk.ColumnMappings.Add("Amt", "Amount");
}
//inserting bulk Records into DataBase
objbulk.WriteToServer((DataTable)ViewState["CurrentTable"]);
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{ con.Close(); }
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('Row inserted');", true);
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
try
{
// Creating sql Connection
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginConnectionString"].ConnectionString);
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
//Inserting Values into Purchase_Master
cmd.CommandText = "Insert into Purchase_Master(PurchaseNo,PDate,Total,OtherCharges,GrandTotal) Values ('" + txtPurchaseNo.Text + "', '" + txtDate.Text + "', '" + txtTotal.Text + "','" + txtOtherCharges.Text + "', '" + txtGrandTotal.Text + "')";
cmd.Parameters.Add("@PurchaseNo", SqlDbType.VarChar).Value = txtPurchaseNo.Text;
cmd.Parameters.Add("@PDate", SqlDbType.VarChar).Value = txtDate.Text;
cmd.Parameters.Add("@Total", SqlDbType.VarChar).Value = txtTotal.Text;
cmd.Parameters.Add("@OtherCharges", SqlDbType.VarChar).Value = txtOtherCharges.Text;
cmd.Parameters.Add("@GrandTotal", SqlDbType.VarChar).Value = txtGrandTotal.Text;
int table1 = cmd.ExecuteNonQuery();
if (table1 == 1)
{ Response.Write("tble one row inserted"); }
else { Response.Write("tble no row affected"); }
cmd.Parameters.Clear();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{ con.Close(); }
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('Purchase Successfully completed');", true);
////Inserting Values into Sales_Detail
cmd.CommandText = "Insert into Sales_Detail(Category,ItemCode,ItemName,Qty,Rate,Amount) Values ('" + DropDown.Text + "','" + txtItemCode.Text + "', '" + txtItemName.Text + "', '" + txtQty.Text + "', '" + txtRate.Text + "', '" + txtAmount.Text + "')";
BulkInsertToDataBase();
}
}
输入值到输出屏幕后。 数据保存到Purchase_Master表,并显示Purchase Successfully completed dailog box。但数据未保存在Purshase_Detail表
中错误显示为:给定的ColumnMapping与源或目标中的任何列都不匹配。 enter image description here