我有一个VSTO插件。现在我正在编写两个用于开发的词典。他们需要坚持,所以我将使用mssql。我创建了表格和所有表格,所以一切都在这一步完成。但是我在处理一些事情时遇到了一些麻烦,所以我有几个问题:
首先,是否可以在VSTO中使用Windows窗体为数据库表创建CRUD表单?有2张桌子,它们不会太长。
接下来,当与SqlConnection连接时,我看到的示例连接字符串没有任何意义。下面是一个示例:tmpConn = new SqlConnection("server=(local)\\SQLEXPRESS;Trusted_Connection=yes");
我不确定如何建立连接字符串。现在我的db是一个本地mssql实例,但将来它将托管在本地网络服务器上。现在说SQLEXPRESS和mssql一样吗?如果没有,我怎么能把它改成mssql?如何为mssql构造正确的字符串以及如何进行身份验证?是在连接字符串中还是在其他地方完成的?
在Last旁边,有一种简单的方法可以使用3列,ID(PK),域和dirname查询数据库。并将domain和dirname放入一个dict,其中domain是键,dirname是值,这个ID没有用。
这是我到目前为止所做的:
public void retrieveClient(SqlConnection conn)
{
try
{
using (conn)
{
SqlCommand command = new SqlCommand(
"SELECT ClientDirName, ClientEmailDomain FROM ClientTable;",
conn);
conn.Open();
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
string clientDir = reader.GetString(0);
string clientEmail = reader.GetString(1);
clientDict.Add(clientEmail, clientDir);
}
}
else
{
MessageBox.Show("No rows found in ClientTable", "Rows Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
reader.Close();
}
}
catch (InvalidOperationException ex)
{
MessageBox.Show(String.Format("Exception while accessing ClientTable: {0}", ex), "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (SqlException ex)
{
MessageBox.Show(String.Format("Exception while accessing ClientTable: {0}", ex), "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
最后,它所说的部分string clientDir = reader.GetString(0)
和string clientEmail = reader.GetString(1)
它会在这里返回正确的值吗?该表有3个值,如我所说,ID,目录和电子邮件。但是你可以看到我的SqlCommand只选择ClientDirName和ClientEmailDomain。这是否意味着GetString()
方法将返回0和1的方法?或者它是1和2,因为ID是0?我不确定它是如何工作的,reader.GetString()
是否将索引基于实际表或SqlCommand?
我还想知道while (reader.Read())
部分是否会逐个添加每一行,以便我的clientDict.Add()
能正常运作。
如果可以使用带有Windows窗体的数据库进行CRUD,请给我一些指导或一个小例子。除此之外,我只需要检查我的代码,以确保它按照我的意愿行事。我一直试图测试它,但目前还有很多其他缺失的部分,所以我需要帮助。
非常感谢任何帮助。如果有人可以为需要身份验证的本地和网络mssql服务器提供一些小的示例连接字符串,那将是一个巨大的帮助。我一直在寻找无处不在,无法实现这一目标。我听说EF可以做到,但我找不到能满足我需要的单一示例或指南。如果有人可以分享一个可能有帮助的人,那么如果你有EF就可以了。
提前致谢!
答案 0 :(得分:1)
您可以将基于VSTO的加载项视为常规.Net应用程序。从Db的角度来看,没有具体的内容。唯一的区别是您的VSTO程序集在主机应用程序中运行(而不是独立)。因此,我建议您阅读有关如何在.net应用程序中使用SQL数据库(ADO.NET)或首先使用EF(实体框架)的任何好书。它将为您提供所有问题的答案。