我有100个Textbox的信息要提交到数据库中 有没有循环语句 可以批量提交 不需要一行代码提交一个数据

解决方案 »

  1.   

    你也真的可以,100个,干嘛不用datagrid?
      

  2.   

    http://topic.csdn.net/u/20111128/09/bcd9d391-a292-4f9a-9e1a-81155131fb3c.html?38859
      

  3.   

    我说的存入数据库是存入界面上录入的信息 比如界面上有100个这样的textbox:姓名【   】  性别 【  】等等
      

  4.   


      /// <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();
                    }
                       }
      

  5.   

    做软件做到你这样,我真的有点不明白了,为什么要用100个textbox,用这么多textbox你保存语句真是有得你拼了。
      

  6.   

    问题就是有那么多的textbox要存入啊 所以就想问问有没有啥方法
      

  7.   

    .......................................
    List<string>ooxx=new List<string>();
    。aa//待处理数据
    for(int i=0;i<100;i++)
    {ooxx.Add(@"insert into tb values('"+aa[i]+"')");}
    OperateDatasWithTransaction(ooxx);
    .................
    ,...........
      

  8.   

    你去查查有关 BCP 的东西,网上不少。
    之不用BCP的时候,排错有点麻烦,另外数据库一旦增、删、修改了字段之后,你的程序就需要修改
      

  9.   

    字符串的每个sql用分号分隔即可,SqlServer和Oracle都支持
    string sql = @"
    insert xxx;
    insert xxx;
    update xxx;
    delete xxx;
    ";
      

  10.   

    可以用事务来做,具体代码参考。                    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();
      

  11.   

    这位xd说的是SqlBulkCopy,这玩意只能Insert,不能做别的事情
      

  12.   

    他是一行,但字段有100个.
    类似 INSERT INTO A(A1,A2,...,A100) VALUES('A1','A2',....,'A100') 是吧!
    需要拼的是这么多字段.
    你可以将控件的名称定义与数据库列名一样,通过循环读取页面上(窗体)的所有控件,最后拼成SQL.
    如果界面上有不需要更插入的控件,则按一定的方式命名.如: A_A1 表示A1字段,只要是A_ 开头的均是需要插入数据库的,而其他开头的则不需要.不过再怎么会有上百个字段呢?即便有一条信息有这么多的字段,也应该分多个表来装载,按类别来分,这样根据不同需要查询时才会有较好的性能呀.
      

  13.   

    databind
    MS自带的控件也有这个了,可以去搞下
      

  14.   

    可以用一个for循环把那些写成一个插入多行的sql语句啊,这样就与数据库交互一次就完成了。语法 :insert 表(列,列,列) select 值1,值2,值3 union 值1,值2,值3