日期:2014-05-17  浏览次数:20420 次

各位前辈好,小弟在多条记录插入数据库的时候,是一条条的加的,不知道为什么只插入了一条,希望大家看看
C# code
OrderBLL OB = new OrderBLL();
        Order OM = new Order();

        String str1 = TextBox2.Text.ToString().Trim(); //可能的字符串格式
        string str2 = str1.Substring(0, 4) + str1.Substring(5, 2) + str1.Substring(8, 2) + "000000";
                DateTime dt = DateTime.ParseExact(str2,
                                         "yyyyMMddHHmmss",
                                          null);
        OM.OrderNum = TextBox1.Text.ToString().Trim();
        OM.RecDate = dt;
        OM.XiadanDate = Convert.ToDateTime(System.Data.SqlTypes.SqlDateTime.MinValue.ToString());//对日期字段,没赋值的地方或用DateTime.MinValue的地方都换为,SqlDateTime.MinValue
        OM.respon_person = TextBox5.Text.ToString().Trim();

        int count = ListBox1.Items.Count;

        try
        {
            for (int i = 0; i < count; i++)
            {
                OM.Classify = ListBox1.Items[i].ToString().Trim();
                OM.Quantity = int.Parse(ListBox2.Items[i].ToString().Trim());

                OB.Add(OM);
            }

            Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('增加订单接单记录成功!');window.window.location.href='../Admin_Main.aspx';</script>");
        }

小弟也调试了,listbox里有五条记录的时候确实循环确实是执行了五次,擦汗如插座执行了五次 ,但是不知道为什么数据库里面值插入了第一条数据。
另外,可能这样一条条的插入数据库对性能有影响,哪位大侠能给小弟写个能一次插入多条数据的存储过程啊?

------解决方案--------------------
是不是因为插入数据库的时候,除了每次的家具品种编号和数量不一样以外,其他的如订单下单时间什么的都一样的原因啊???但是这样说不请,貌似不是这个原因。
------解决方案--------------------
执行了五次不代表都成功了

去跟踪没次的 返回的数据航的状态
------解决方案--------------------
批量插入记录,需要用到xml传递数据,使用xml批量插入数据的示例:
SQL Server2005中使用XML-OPENXML


------解决方案--------------------
for (int i = 0; i < count; i++)
{
Order OM = new Order();//这个应该放这里吧
OM.Classify = ListBox1.Items[i].ToString().Trim();
OM.Quantity = int.Parse(ListBox2.Items[i].ToString().Trim());

OB.Add(OM);
}
------解决方案--------------------
我以前做的就是那样做的.程序中将订单中每个子项的信息拼接起来. 在存储过程里再循环截取.
生成一个订单只执行一次数据库连接.
------解决方案--------------------
从LZ的问题看出来你有几个问题

1.你还没清楚怎么调试吗
谁说3层不能调试底层,这个问题比你问的问题更严重
F11是可以进入方法里面去的

2.更严重的是你的多条数据执行没有考虑事务,不懂事务就网上查查,或者
用10楼HHQSY的事务方法,事务可以解决你的并发问题,1条成功,后面的失败的话
全部失败。5条成功的话则真正的5条成功

3.你刚才不是说想要N条数据一起执行吗
你可以把所有的sql语句通过StringBuilder来连接
再通过【事务执行】,不是直接【执行】哦

4.当然,通过StringBuilder连接字符串的话还要考虑sql注入
如果是同事删除就不需要考虑,因为删除大多用ID删,不会有事
如果是添加,修改的话,可能就会存在注入的问题

5.string str2 = a + b + c + ...
以后不要这样写字符串相加OK,用StringBuilder连接,不懂去查

6.你的一个代码
String str1 = TextBox2.Text.ToString().Trim(); //可能的字符串格式
string str2 
你怎么一会用String,一会儿用string
知道区别吗,不知道去查吧


稍微看了下你的代码,问题多多哦o(∩_∩)o