private void ThreadProc()
{
if(my.State==ConnectionState.Closed)
{
try
{
my.Open();
}
catch
{
label1.Text="不能打开数据库!";
}
}
while(Qu.Count>0)//需要执行队列的总数,(2000个左右)
{
adddata();
}
Thread.Sleep(1000);
}
}private void adddata()
{
//处理数据生成SQL,插入数据库
SqlCommand cmd = new SqlCommand(sql,my);
cmd.ExecuteNonQuery();
}
//执行线程
private void button1_Click(object sender, System.EventArgs e)
{
my = new SqlConnection(connstr);
my.Open();
Thread Ft= new Thread(new ThreadStart(ThreadProc));
Ft.IsBackground=true;
Ft.Start();
}问题:程序执行到队列1000左右的时候,数据库提示当前连接为CLOSE,后面运行的时候有些可以运行,有些不能提示错误!
是数据库连接的问题?!还是多线程的问题呢?!请高手指点。
{
if(my.State==ConnectionState.Closed)
{
try
{
my.Open();
}
catch
{
label1.Text="不能打开数据库!";
}
}
while(Qu.Count>0)//需要执行队列的总数,(2000个左右)
{
adddata();
}
Thread.Sleep(1000);
}
}private void adddata()
{
//处理数据生成SQL,插入数据库
SqlCommand cmd = new SqlCommand(sql,my);
cmd.ExecuteNonQuery();
}
//执行线程
private void button1_Click(object sender, System.EventArgs e)
{
my = new SqlConnection(connstr);
my.Open();
Thread Ft= new Thread(new ThreadStart(ThreadProc));
Ft.IsBackground=true;
Ft.Start();
}问题:程序执行到队列1000左右的时候,数据库提示当前连接为CLOSE,后面运行的时候有些可以运行,有些不能提示错误!
是数据库连接的问题?!还是多线程的问题呢?!请高手指点。
{
SqlCommand cmd = new SqlCommand();//有循环应将此对象放外面
cmd.Connection = my; while(Qu.Count>0)//需要执行队列的总数,(2000个左右)
{
adddata(cmd);
}
//Thread.Sleep(1000);没必要的延时
}//应该在adddata方法中加try{...},因为ExecuteNonQuery()会导致错误。
private void adddata(SqlCommand cmd){
try
{//处理数据生成SQL,插入数据库
if(my.State == ConnectionState.Closed) this.my.Oper();
cmd.ExecuteNonQuery();
}
catch
{
ErrorCount++;//错误计数器
}
}
//......其实你完全可以不使用线程,因为这里执行的速度取决于cmd.ExecuteNonQuery()方法,即SQL的复杂程度。
还有,你应该加一个执行进度条来直观的显示执行进度(在while上++),不然这个线程只能能防止出现假死的作用罢了!