C# 数据库上的异步操作
我正在构建一个WF应用程序“时事通讯”,以向选定的电子邮件组发送电子邮件,这些电子邮件组是从此应用程序创建的,并存储在一个C# 数据库上的异步操作,c#,.net,winforms,asynchronous,sql-server-ce,C#,.net,Winforms,Asynchronous,Sql Server Ce,我正在构建一个WF应用程序“时事通讯”,以向选定的电子邮件组发送电子邮件,这些电子邮件组是从此应用程序创建的,并存储在一个.sdf数据库中,该数据库是SQL Server Compact Edition,内置于Visual Studio 2012中 到目前为止,我已经在主线程上运行了这个应用程序,但这不是应该用于数据库的方法,我希望异步地在数据库上执行所有操作。我读过一些方法,但我从未使用过它们,对此感到困惑 对于对DB和关系的外观感兴趣的ppl,请阅读下面的方括号: 截至目前,共有2个表格:
.sdf
数据库中,该数据库是SQL Server Compact Edition,内置于Visual Studio 2012中
到目前为止,我已经在主线程上运行了这个应用程序,但这不是应该用于数据库的方法,我希望异步地在数据库上执行所有操作。我读过一些方法,但我从未使用过它们,对此感到困惑
对于对DB和关系的外观感兴趣的ppl,请阅读下面的方括号:
截至目前,共有2个表格:
电子邮件
(int UniqueID,字符串电子邮件)组
(int-ID,string-Grupa)UniqueID+Email
,第二个表中的PK为ID+string
,第二个表中的FK至表1为ID
,并连接到UniqueID
我将添加第三个表,其中包含ExistingGroups
和1列ExstGroup
,它将与表2相关,其中Grupa
将被FK到ExistingGroups
,这个第三个表将存储数据库中所有组的名称,并将用于动态创建复选框(存储在checkedListBox中?)当应用程序启动时,它将在FormLoad事件中触发,我想,如果我错了,请纠正我
我想使用ADO.net连接层方法,因此这里有几个问题:
SendingEmail
函数的代码片段。如何将其转换为异步
// CheckedEmails is Form variable to store emails from groups which where checked on checkboxes.
HashSet<string> CheckedEmails = new HashSet<string>();
private HashSet<string> ListOfEmails()
{
CheckedEmails.Clear();
Queue<string> checkBoxes = new Queue<string>();
if (IT_checkbox.Checked) //checking all checkboxes this way..
{
checkBoxes.Enqueue(IT_checkbox.Text);
}
SqlCeCommand cmd = conn.CreateCommand();
while (checkBoxes.Count() != 0)
{
cmd.CommandText = string.Format("Select Email FROM Emails INNER JOIN Groups ON Emails.UniqueID=Groups.ID WHERE Groups.Grupa='{0}' ", checkBoxes.Dequeue());
SqlCeDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
CheckedEmails.Add((string)dr["Email"]);//adding emails fromcheckedgroups
}
dr.Close();
}
return CheckedEmails;
}
//CheckedEmails是表单变量,用于存储来自选中复选框的组的电子邮件。
HashSet CheckedEmails=新HashSet();
私有HashSet ListOfEmails()
{
checkedmails.Clear();
队列复选框=新队列();
if(IT_checkbox.Checked)//以这种方式检查所有复选框。。
{
checkbox.Enqueue(IT_checkbox.Text);
}
SqlCeCommand cmd=conn.CreateCommand();
while(复选框.Count()!=0)
{
cmd.CommandText=string.Format(“从电子邮件中选择电子邮件,在电子邮件中加入组。UniqueID=Groups.ID,其中Groups.Grupa='{0}',checkbox.Dequeue());
SqlCeDataReader dr=cmd.ExecuteReader();
while(dr.Read())
{
CheckedEmails.Add((字符串)dr[“Email”]);//添加来自checkedGroups的电子邮件
}
Close博士();
}
退回支票邮件;
}
提前感谢大家的帮助,我尽量做到精确,但如果有什么不可理解的,请询问。2)您可以使用异步和等待功能;) 我写了违反规定的东西吗?如果是,请告诉我第3个问题:尝试在项目中添加progressbar控件,其值随着while循环的进行而增加。只需使用Backgroundworker组件即可。我问了几个问题,请回答您要回答的问题。如果我在ListoFeails{Task.run(()=>{我的ListoFeails函数中的代码})中运行;返回支票邮件;}可以吗?