还要问大家一个问题。下面代码已经测试成功了,但是有一个问题,就是数据库在insert 的时候总提示超时。
我是网外网插入数据的。内网测试一切正常。但是外网的时候能插入大概70多行就提示超时了。
外网的ping 值在65左右,比较平稳。错误:
时时间已到。在操作完成之前超时时间已过或服务器未响应。
或有时出现
在从服务器接收结果时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 指定的网络名不再可用。)
请问有什么好的办法吗?
注:外网为铁通光纤。传输是跨省的。C# code
private void button1_Click(object sender, System.EventArgs e)
{
       Thread thread = new Thread(InsertData);
       thread.Start();
}private void InsertData()
{
        int i = 0;//进度条初始值
        using( SqlConnection dbConn = new SqlConnection(sConnect) )
        {
            dbConn.Open();
            SqlCommand dbCmdMaxValues = new SqlCommand(MaxValues, dbConn);
            string XuHao = dbCmdMaxValues.ExecuteScalar().ToString();
            DataTable dt = Query(XuHao);//返回结果值
            //progressBar1.Maximum = dt.Rows.Count;//设置最大行数。
                Action<int> setProgress1 = x => progressBar1.Maximum = x;
                progressBar1.Invoke(setProgress1, dt.Rows.Count);
            SqlCommand dbCmd = new SqlCommand();
                Action<int> setProgress2 = x => progressBar1.Value = x;
        foreach (DataRow row in dt.Rows)
        {
            string sql= @"INSERT INTO " + StationName + @"(序号,流水号)
                          VALUES("+Convert.ToInt32(row["序号"])+","Convert.ToString(row["流水号"])+")";
            dbCmd.CommandText = sql;
            dbCmd.Connection = dbConn;
            dbCmd.ExecuteNonQuery();
            //进度条
            progressBar1.Invoke(setProgress2, i++);
        }
            MessageBox.Show("成功!");
            dbConn.Close();
        }
}

解决方案 »

  1.   

    麻烦我想问一下,要是每天需要在一个access数据库中把相应的数据传入公司服务器,怎么做才好呢.数据不多,一天也就200多条.
      

  2.   

    批量insert操作使用sqlbulkcopy
    using(TransactionScope ts
     事务处理
      

  3.   

    我做的是winform程序呀。现在测试如果插入的数据在100条左右没有问题。150的时候就会出现插入延迟,很慢,过一会就提示超时了
      

  4.   

    http://social.microsoft.com/Forums/pt-BR/sqlserverzhchs/thread/0c90c0d5-03fa-4fcf-aba4-5d158b32cee4http://social.microsoft.com/Forums/zh-CN/sqlserverzhchs/thread/ee0e2d05-6ee9-4961-a294-4beeb82dc222
      

  5.   

    http://www.cnblogs.com/samlin/archive/2009/03/31/1426064.htmlhttp://www.cfansblog.com/html/ShuJuKu/mssql/558.html
      

  6.   

    能不能和防火墙有关系呢。我做断点了并每更新50条,close一次。但是还是在100条左右就会很慢。用Debug.writeline。发现几乎每次都是在100条左右就出现慢速。跟踪错误还能发在100条左右时候出现System.InvalidOperationException 中第一次偶然出现的“System.Data.dll”类型的异常。
    我在另一台外网的机器上测试多次正常插入,没出现慢的情况,也没有异常。麻烦大家,如果互联网传输会出现问题。有什么办法比较好呢。有人说使用webserivce。有高手能帮改改吗?怎么使用WEBservices.对了,关于SqlBulkCopy我也测试了。在局域网很快。没有问题,但是在互联网就不能用了,错误提示
    2011-02-25 12:34:04 ErrorCode: -2146232060
    在从服务器接收结果时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。)
    超时时间已到。在操作完成之前超时时间已过或服务器未响应。

    也知道为什么?
    下面是SqlBulkCopy代码
    [code=C#]  try
                {
                    SqlConnection dbConn = new SqlConnection(sConnect);
                    dbConn.Open();
                    /////////////////////////////////////////查询最大值///////////////////////////////////////////////
                    SqlCommand dbCmdMaxValues = new SqlCommand(sqlMaxValues, dbConn);
                    xuHao = dbCmdMaxValues.ExecuteScalar().ToString();
                    DataTable dt = accessQuery(xuHao);//查询ACCESS数据并放入DATATABLE中。
                    //progressBar1.Maximum = dt.Rows.Count;//设置最大行数。
                    Action<int> setProgress1 = x => progressBar1.Maximum = x;
                    progressBar1.Invoke(setProgress1, dt.Rows.Count);
                    Action<int> setProgress2 = x => progressBar1.Value = x;                if (dt.Rows.Count == 0)
                    {
                        MessageBox.Show("无数据可上传!");
                    }
                    else
                    {
                        SqlBulkCopy bulkCopy = new SqlBulkCopy(dbConn);
                        bulkCopy.DestinationTableName = stationName;
                        bulkCopy.WriteToServer(dt);                    ErrLog("上传成功");//错误日志
                        MessageBox.Show("上传成功!");
                    }
                    dbConn.Close();code]
      

  7.   

    批量上传+事务减少访问数据库的次数理论上连接一次,执行100条sql肯定优于连100次,每次执行一条
      

  8.   

    已经解决,用Webservices和winform解决,传递二进制流。没有出现问题。