一次将数据网格视图的所有数据插入数据库
本文关键字:数据 视图 数据库 插入 网格 数据网 一次 | 更新日期: 2023-09-27 18:34:05
我有一个数据网格视图,它是由各种操作和用户对数据的操纵创建的。我想一次将网格视图的所有数据插入数据库,我知道我可以尝试类似于下面的代码:
for(int i=0; i< dataGridView1.Rows.Count;i++)
{
string StrQuery= @"INSERT INTO tableName VALUES (" + dataGridView1.Rows[i].Cells["ColumnName"].Value +", " + dataGridView1.Rows[i].Cells["ColumnName"].Value +");";
try
{
using (SqlConnection conn = new SqlConnection(ConnString))
{
using (SqlCommand comm = new SqlCommand(StrQuery, conn))
{
conn.Open();
comm.ExecuteNonQuery();
}
}
}
但是,每次插入记录时创建新连接是否公平?数据网格可能包含许多行...有没有办法一次将所有数据取出到服务器并在sql中循环以插入所有数据?
如果您移动 for 循环,则不必建立多个连接。 只需快速编辑代码块(绝不完全正确(:
string StrQuery;
try
{
using (SqlConnection conn = new SqlConnection(ConnString))
{
using (SqlCommand comm = new SqlCommand())
{
comm.Connection = conn;
conn.Open();
for(int i=0; i< dataGridView1.Rows.Count;i++)
{
StrQuery= @"INSERT INTO tableName VALUES ("
+ dataGridView1.Rows[i].Cells["ColumnName"].Text+", "
+ dataGridView1.Rows[i].Cells["ColumnName"].Text+");";
comm.CommandText = StrQuery;
comm.ExecuteNonQuery();
}
}
}
}
关于一次执行多个SQL命令,请查看此链接:单个 SqlCommand 中的多个语句
我认为最好的方法是使用 TableAdapters 而不是使用 Commands 对象,它的 Update 方法将数据集或 DataTable 内所做的所有更改(更新、插入和删除(直接发送到数据库。通常在使用 DataGridView 时,绑定到绑定源,该绑定源允许您与数据源(如数据表或数据集(进行交互。
如果以这种方式工作,则在有界数据网格视图上,只需执行以下操作:
this.customersBindingSource.EndEdit();
this.myTableAdapter.Update(this.myDataSet.Customers);
"customersBindingSource"是DataGridView的数据源。
适配器的 Update 方法将更新单个数据表和 根据 表中每个数据行的行状态。
寄件人: https://msdn.microsoft.com/en-us/library/ms171933.aspx
因此,使用 Update 方法时,在 DatagridView 中所做的任何更改都将反映在数据库中。
更多关于 表适配器: https://msdn.microsoft.com/en-us/library/bz9tthwx.aspx
请查看以下是否可以为您提供帮助
类Post_Sales
Public Shared Sub Post_sales()
Dim ITM_ID As Integer
Dim SLS_QTY As Integer
Dim SLS_PRC As Double
Dim SLS_AMT As Double
Dim DSPL_RCT As String
Dim TAX_CODE As Integer
'Format the current date and send it to a textbox
Form1.TextBox6.Text = System.DateTime.Now.ToString((" yyyy-MM-dd"))
'Open Connection
Dim con As New SqlConnection("Initial Catalog=Your Database here;Data source=.;Network Library=DBMSSOCN;User ID=sa;Password=")
con.Open()
'Insert Records into the database
For Each rw As DataGridViewRow In Form1.DataGridView1.Rows
ITM_ID = rw.Cells("Column1").Value
DSPL_RCT = rw.Cells("Column2").Value
SLS_QTY = rw.Cells("Column3").Value
SLS_PRC = rw.Cells("Column4").Value
SLS_AMT = rw.Cells("Column5").Value
TAX_CODE = rw.Cells("Column6").Value
Dim cmd As New SqlCommand("INSERT INTO DAY_PLUSALES (DT,ITM_ID,DSPL_RCT,SLS_QTY,SLS_PRC,SLS_AMT,TAX_CODE) values ('" & Form1.TextBox6.Text & "','" & ITM_ID & "','" & DSPL_RCT & "','" & SLS_QTY & "','" & SLS_PRC & "','" & SLS_AMT & "','" & TAX_CODE & "')", con)
cmd.ExecuteNonQuery()
Next
con.Close()
MessageBox.Show("Records Added to the SQL Database successfully!", "Records Updated ")
End Sub
结束类
试试这个 100% 工作代码
string SQL = "", tableName = "tableName";
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
SQL = @"INSERT INTO " + tableName + " VALUES (";
for (int col = 0; col < dataGridView1.ColumnCount; col++)
{
string data = "";
if (dataGridView1.Rows[i].Cells[col].Value != null)
{
data = dataGridView1.Rows[i].Cells[col].Value.ToString();
}
SQL += "'" + data.Trim() + "'";
if (col < dataGridView1.ColumnCount - 1)
{
SQL += ",";
}
}
SQL += ")";
string finalSQL = SQL;
//INSERT to DB the finalSQL
}
您的数据现已准备就绪 使用连接将 finalSQL 插入数据库中
您可以只打开一次连接执行相同的操作。像这样的东西。
for(int i=0; i< dataGridView1.Rows.Count;i++)
{
string StrQuery= @"INSERT INTO tableName VALUES (" + dataGridView1.Rows[i].Cells["ColumnName"].Value +", " + dataGridView1.Rows[i].Cells["ColumnName"].Value +");";
try
{
SqlConnection conn = new SqlConnection();
conn.Open();
using (SqlCommand comm = new SqlCommand(StrQuery, conn))
{
comm.ExecuteNonQuery();
}
conn.Close();
}
此外,根据您的特定方案,您可能需要研究将网格绑定到数据库。这将大大减少手动工作量:http://www.switchonthecode.com/tutorials/csharp-tutorial-binding-a-datagridview-to-a-database
您有语法错误 请尝试以下语法:
string StrQuery="INSERT INTO tableName VALUES ('" + dataGridView1.Rows[i].Cells[0].Value + "',' " + dataGridView1.Rows[i].Cells[1].Value + "', '" + dataGridView1.Rows[i].Cells[2].Value + "', '" + dataGridView1.Rows[i].Cells[3].Value + "',' " + dataGridView1.Rows[i].Cells[4].Value + "')";
try
{
string barcode = "", name = "";
int qty = 0, unitprice = 0;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
barcode= dataGridView1.Rows[i].Cells["barcode"].Value.ToString();
name = dataGridView1.Rows[i].Cells["name"].Value.ToString();
qty = Int32.TryParse(dataGridView1.Rows[i].Cells["stkqty"].Value.ToString(),out qty)?qty:0;
unitprice = Int32.TryParse(dataGridView1.Rows[i].Cells["unitprice"].Value.ToString(),out unitprice)?unitprice:0;
SqlConnection conn = new SqlConnection(urls);
conn.Open();
String insertquery = "INSERT INTO Stock_Sale_Record(invoiceno,barcode,saleqty,proname,saleprice,duedate) VALUES (@invoiceno,@barcode,@saleqty,@proname,@saleprice,@duedate)";
SqlCommand insertcommand = new SqlCommand(insertquery, conn);
insertcommand.Parameters.AddWithValue("@invoiceno", invoicenolabel.Text.ToString());
insertcommand.Parameters.AddWithValue("@barcode", barcode);
insertcommand.Parameters.AddWithValue("@saleqty", qty);
insertcommand.Parameters.AddWithValue("@proname", name);
insertcommand.Parameters.AddWithValue("@saleprice", unitprice);
insertcommand.Parameters.AddWithValue("@duedate", duedatetxt.Value.Date);
insertcommand.ExecuteNonQuery();
conn.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(""+ex.Message);
}
for (int i = 0; i < dataGridView2.Rows.Count; i++)
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=ID_Proof;Integrated Security=True");
SqlCommand cmd = new SqlCommand("INSERT INTO Restaurant (Customer_Name,Quantity,Price,Category,Subcategory,Item,Room_No,Tax,Service_Charge,Service_Tax,Order_Time) values (@customer,@quantity,@price,@category,@subcategory,@item,@roomno,@tax,@servicecharge,@sertax,@ordertime)", con);
cmd.Parameters.AddWithValue("@customer",dataGridView2.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@quantity",dataGridView2.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@price",dataGridView2.Rows[i].Cells[2].Value);
cmd.Parameters.AddWithValue("@category",dataGridView2.Rows[i].Cells[3].Value);
cmd.Parameters.AddWithValue("@subcategory",dataGridView2.Rows[i].Cells[4].Value);
cmd.Parameters.AddWithValue("@item",dataGridView2.Rows[i].Cells[5].Value);
cmd.Parameters.AddWithValue("@roomno",dataGridView2.Rows[i].Cells[6].Value);
cmd.Parameters.AddWithValue("@tax",dataGridView2.Rows[i].Cells[7].Value);
cmd.Parameters.AddWithValue("@servicecharge",dataGridView2.Rows[i].Cells[8].Value);
cmd.Parameters.AddWithValue("@sertax",dataGridView2.Rows[i].Cells[9].Value);
cmd.Parameters.AddWithValue("@ordertime",dataGridView2.Rows[i].Cells[10].Value);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Added successfully!");