还要问大家一个问题。下面代码已经测试成功了,但是有一个问题,就是数据库在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();
}
}
我是网外网插入数据的。内网测试一切正常。但是外网的时候能插入大概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();
}
}
using(TransactionScope ts
事务处理
我在另一台外网的机器上测试多次正常插入,没出现慢的情况,也没有异常。麻烦大家,如果互联网传输会出现问题。有什么办法比较好呢。有人说使用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]