当前位置:编程学习 > C#/ASP.NET >>

数据批量存入数据库

我有100个Textbox的信息要提交到数据库中 有没有循环语句 可以批量提交 不需要一行代码提交一个数据 --------------------编程问答-------------------- 你也真的可以,100个,干嘛不用datagrid? --------------------编程问答-------------------- http://topic.csdn.net/u/20111128/09/bcd9d391-a292-4f9a-9e1a-81155131fb3c.html?38859 --------------------编程问答--------------------
引用 1 楼 denqh 的回复:
你也真的可以,100个,干嘛不用datagrid?

LZ可能是一个修改页面吧 --------------------编程问答-------------------- sql中用stringbuild的拼接 --------------------编程问答-------------------- 一行一行放进去肿么啦? --------------------编程问答-------------------- 我说的存入数据库是存入界面上录入的信息 比如界面上有100个这样的textbox:姓名【   】  性别 【  】等等。。。
--------------------编程问答--------------------

  /// <summary>
        /// 带事务的批量操作数据。
        /// </summary>
        /// <param name="sqlInsert">SQL</param>
        /// <returns>操作是否成功</returns>
        public static bool OperateDatasWithTransaction(List<string> sqlList)
        {
            OracleConnection myConnection = new OracleConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnStrOrcl"]);
                myConnection.Open();
                OracleCommand myCommand = myConnection.CreateCommand();
                OracleTransaction myTrans;
                // Start a local transaction
                myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted);
                // Assign transaction object for a pending local transaction
                myCommand.Connection = myConnection;
                myCommand.Transaction = myTrans;
                try
                {
                    foreach (string item in sqlList)
                    {
                        myCommand.CommandText = item;
                        myCommand.ExecuteNonQuery();
                    }
                    myTrans.Commit();
                    return true;
                }
                catch (Exception)
                {
                    myTrans.Rollback();
                    return false;
                }
                finally
                {
                    myConnection.Close();
                }
           

        }

--------------------编程问答-------------------- 看看有没有 比较简单的方法么  --------------------编程问答-------------------- 用事务控制 --------------------编程问答-------------------- 不一行一行放怎么放啊?数据库它处理也是一行行处理的啊。批处理对你来说是透明的啊。类似于在宏观上并行,微观上串行的道理哦。我晕啊 啊 啊 啊  啊啊 啊啊 ,一口吃不完的,要分开来吃,一口一口地吃啊 --------------------编程问答-------------------- --------------------编程问答-------------------- 10楼有点误解我的意思了 我的意思是把若干的信息 用一整段代码完成存入, 而不是一行代码存入一个信息。 --------------------编程问答-------------------- 做软件做到你这样,我真的有点不明白了,为什么要用100个textbox,用这么多textbox你保存语句真是有得你拼了。 --------------------编程问答-------------------- 问题就是有那么多的textbox要存入啊。。。 所以就想问问有没有啥方法 --------------------编程问答-------------------- .......................................
List<string>ooxx=new List<string>();
。。。。aa//待处理数据
for(int i=0;i<100;i++)
{

ooxx.Add(@"insert into tb values('"+aa[i]+"')");

}
OperateDatasWithTransaction(ooxx);
.................
,...........
--------------------编程问答-------------------- 不行你扁我 --------------------编程问答-------------------- 15楼的这个ooxx是亮点。。。 --------------------编程问答--------------------
引用 17 楼 andyha2008 的回复:
15楼的这个ooxx是亮点。。。
啥亮点啊啊啊啊  啊啊啊  --------------------编程问答-------------------- 我的回复都被鹳狸猿删了啊, --------------------编程问答-------------------- 11楼呢? --------------------编程问答--------------------
引用 20 楼 hhqsy 的回复:
11楼呢?


11楼去火星度假了~ --------------------编程问答--------------------
引用 21 楼 andyha2008 的回复:
引用 20 楼 hhqsy 的回复:
11楼呢?


11楼去火星度假了~
--------------------编程问答-------------------- 研究表明,批量操作数据时,为了数据的完整   性   事    务是必需的。 --------------------编程问答-------------------- --------------------编程问答-------------------- 你去查查有关 BCP 的东西,网上不少。
之不用BCP的时候,排错有点麻烦,另外数据库一旦增、删、修改了字段之后,你的程序就需要修改 --------------------编程问答-------------------- 字符串的每个sql用分号分隔即可,SqlServer和Oracle都支持
string sql = @"
insert xxx;
insert xxx;
update xxx;
delete xxx;
";
--------------------编程问答-------------------- 可以用事务来做,具体代码参考。             
       DataSet dt = new DataSet();
            SqlConnection con = new SqlConnection(Configurations.Conn);
            con.Open();
            SqlTransaction stion = con.BeginTransaction(IsolationLevel.ReadCommitted);
            try
            {
                
                SqlDataAdapter sdp = new SqlDataAdapter();
                SqlCommand commselect = new SqlCommand();
                commselect.Connection = con;
                commselect.CommandText = "select password,Names,Address,Pid,Image from  Users";
                sdp.SelectCommand = commselect;//首先要指定selectitem,并且字段要指定清楚,和insert字段个数和名称一致
                SqlCommandBuilder scom = new SqlCommandBuilder(sdp);
                sdp.SelectCommand.Transaction = stion;
                sdp.Fill(dt, "Users");

                DataTable dts = dt.Tables["Users"].Clone();
                DataRow dr = null;
                for (int i = 1; i < 6; i++)
                {
                    dr = dts.NewRow();
                    dr["Names"] = "Jeep" + i.ToString();
                    dr["password"] = i.ToString();
                    dr["Address"] = "第12" + i.ToString() + "街道";
                    dr["Pid"] = i + 8;
                    dr["Image"] = null;
                    dts.Rows.Add(dr);
                }
                //通过对表值的修改,实现方法Update(table)
                dts.AcceptChanges();
                foreach (DataRow row in dts.Rows)
                    row.SetAdded();


                SqlParameter[] parsup = new SqlParameter[]
                    { 
                 new SqlParameter("@Names",SqlDbType.VarChar,10,"Names")
                 ,new SqlParameter("@password",SqlDbType.VarChar,20,"password")
                ,new SqlParameter("@Address",SqlDbType.VarChar,40,"Address")
                , new SqlParameter("@Pid",SqlDbType.Int,4,"Pid")
                ,new SqlParameter("@Image",SqlDbType.Image,200,"Image")
                    };


                SqlCommand commins = new SqlCommand();
                commins.CommandText = "Insert into Users values(@Names,@password,@Address,@Pid,@Image)";
                sdp.InsertCommand = commins;//insert com语句
                sdp.InsertCommand.Transaction = stion;
                commins.Parameters.AddRange(parsis);
                SqlCommandBuilder icom = new SqlCommandBuilder(sdp);


   
      
         
     
                Console.WriteLine( sdp.Update(dts));
                dts.AcceptChanges();
               
            }
            catch (SqlException ex)
            {
                Console.WriteLine(ex.ToString());
                stion.Rollback();
            }
            stion.Commit();
--------------------编程问答-------------------- 这位xd说的是SqlBulkCopy,这玩意只能Insert,不能做别的事情

引用 25 楼 jy251 的回复:
你去查查有关 BCP 的东西,网上不少。
之不用BCP的时候,排错有点麻烦,另外数据库一旦增、删、修改了字段之后,你的程序就需要修改
--------------------编程问答-------------------- 他是一行,但字段有100个.
类似 INSERT INTO A(A1,A2,...,A100) VALUES('A1','A2',....,'A100') 是吧!
需要拼的是这么多字段.
你可以将控件的名称定义与数据库列名一样,通过循环读取页面上(窗体)的所有控件,最后拼成SQL.
如果界面上有不需要更插入的控件,则按一定的方式命名.如: A_A1 表示A1字段,只要是A_ 开头的均是需要插入数据库的,而其他开头的则不需要.

不过再怎么会有上百个字段呢?即便有一条信息有这么多的字段,也应该分多个表来装载,按类别来分,这样根据不同需要查询时才会有较好的性能呀. --------------------编程问答-------------------- 新来的,希望能多多学习! --------------------编程问答-------------------- databind
MS自带的控件也有这个了,可以去搞下 --------------------编程问答-------------------- --------------------编程问答-------------------- 在数据库里写个事务,将值传进去调用事务 --------------------编程问答-------------------- --------------------编程问答-------------------- 可以用一个for循环把那些写成一个插入多行的sql语句啊,这样就与数据库交互一次就完成了。语法 :insert 表(列,列,列) select 值1,值2,值3 union 值1,值2,值3
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,