c#通过for循环多次向数据库中插入数据。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#通过for循环多次向数据库中插入数据。相关的知识,希望对你有一定的参考价值。

c#语言想要通过for循环语句,多次向MySQL数据库中添加语句,应该怎么写。求详细代码。

你的问题不甚清晰。需要插入的数据来源是在窗体中吗?SQL需要拼接吗?

给你一段代码参考,这段代码是将窗体中dataGridView中的数据循环插入数据库,循环过程中拼接SQL,并执行插入:

//主方法,拼接SQL并执行插入
        private int InsertInTo()
        
            StringBuilder sqlinsert = new StringBuilder();
            StringBuilder sqlvalue = new StringBuilder();
            sqlinsert.Append("  insert into  你的表名  (     ");
            sqlvalue.Append("   values(");
            int num = 0;//该变量用来获取插入多少条数据
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            
                for (int c = 0; c < dataGridView1.Columns.Count; c++)
                
                    sqlinsert.Append(dataGridView1.Columns[c].HeaderText + ",");//赋值列名
                    sqlvalue.Append("'" + dataGridView1.Rows[i].Cells[c].Value.ToString() + "'");//赋值列对应的值
                
                string sql = sqlinsert.ToString().Substring(0, sqlinsert.Length - 1) + ")  " + sqlvalue.ToString().Substring(0, sqlvalue.Length - 1) + ")";//拼接完整插入SQL
                num += Insert(sql);//调用插入方法,并接收返回的插入行数
            
            return num;
        
        //连接数据库并执行SQL
        private int  Insert(string sql)
        
            string connstring = "server=127.0.0.1\\\\SQLEXPRESS;database=你的数据库名;uid=用户名;pwd=密码";
            SqlConnection conn = new SqlConnection(connstring);
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            int n = cmd.ExecuteNonQuery();//执行
            conn.Close();
            cmd.Dispose();
            return n;
        

赋值列名时可以放在循环外只赋值一次。

参考技术A List<string> sqls=new List<string>()sql1,sql2,sql3...;
int row=0;
using (SqlConnection Connection = new SqlConnection(ConnectionString))

SqlTransaction transaction=null;
SqlCommand Command=null;
try
Connection.Open();
transaction = Connection.BeginTransaction();
foreach(string SQL in sqls)

Command = new SqlCommand(SQL, Connection, transaction);
rows = Command.ExecuteNonQuery();
if (rows<=0)//失败

transaction.Rollback();
break;



catch(Exception ex)

try

transaction.Rollback();

catch

if(rows>0)//成功
transaction.Commit();

通过 C# 和 OleDb 在 Excel 电子表格中插入一行

【中文标题】通过 C# 和 OleDb 在 Excel 电子表格中插入一行【英文标题】:Inserting a row into Excel Spreadsheet via C# and OleDb 【发布时间】:2012-01-20 15:58:55 【问题描述】:

我需要多次以编程方式将一行插入 Excel 电子表格。我需要实际插入一个新行而不是插入数据,也就是说,我需要将所有其他行实际下移一位。

我目前正在使用 OleDB 插入数据本身,如下所示:

//Note I have missed some code out for simplicities sake, this all works fine however
OleDbConnection oledbConn = null;

OleDbCommand cmd = null;

OleDbConnection = new OleDbConnection(connString);           
OleDbConnection.Open();

string connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=0;Extended Properties=\"Excel 8.0; \"", TargetFile);

sting InsertCommand = string.Format("INSERT INTO [0$1:1] Values(2)", WorksheetName, Coord, valuestring);

cmd = new OleDbCommand(InsertCommand, oledbConn);

cmd.ExecuteNonQuery();

//close etc

我希望能够以类似的方式插入一行。这可能吗?

【问题讨论】:

您可能需要考虑使用外部库来处理 Excel 文件,例如 npoi.codeplex.com 而不是 OleDB。 【参考方案1】:

一目了然,需要指定读写,默认为只读。也许: “提供者=Microsoft.Jet.OLEDB.4.0;” &_ “数据源=C:\Docs\Test.xls;” &_ "Mode=ReadWrite;Extended Properties=""Excel 8.0;HDR=No"""

再看一遍,我认为Interop 可能是最好的选择。

【讨论】:

干杯,其实我可以写得很好,问题是我需要插入一行而不是向现有行添加数据。 对不起,我不明白你的意思。我虽然我指的是插入一个新行(***.com/questions/5027899/…) 对不起,我没有很好地表达这一点。我提供的代码工作正常,我的连接字符串允许我在插入数据时读/写。我需要添加一行,向下移动所有现有的行/内容。 @Damien 啊,对不起!我认为 ODBC 不适合你,我认为你需要互操作 (***.com/questions/1111935/c-sharp-and-excel-interop) 如果您想将其添加为答案(使用互操作),我可以接受。可能比我接受这个更有意义。【参考方案2】:

ipavlic 是对的,您最好为此使用外部第三方库。有几种可用。 OfficeWriter 就是一个例子:

http://www.officewriter.com

使用 OfficeWriter 打开工作簿后,您可以在 Worksheet 类上使用此方法插入行。它模仿 Excel 的行为,包括更新/扩展公式和其他更新:

public void InsertRows(int rowNumber, int rowCount)

【讨论】:

以上是关于c#通过for循环多次向数据库中插入数据。的主要内容,如果未能解决你的问题,请参考以下文章

如何使用循环向表中插入数据。?

如何在SQLserver中利用循环语句插入大量的数据

使用 for 循环将多条记录插入 SQL Server 数据库

C# 通过C#代码向Access数据库批量插入数据

MYSQL通过循环向数据库中插入数据

c#数组插入元素在数组的最前面数组中原来的值依次向后排列