VSTO Addin连接到MSSQL

时间:2015-06-01 19:50:58

标签: c# sql-server vsto

我有一个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就可以了。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以将基于VSTO的加载项视为常规.Net应用程序。从Db的角度来看,没有具体的内容。唯一的区别是您的VSTO程序集在主机应用程序中运行(而不是独立)。因此,我建议您阅读有关如何在.net应用程序中使用SQL数据库(ADO.NET)或首先使用EF(实体框架)的任何好书。它将为您提供所有问题的答案。