0

因此,我使用此代码进行我的 sql 连接以连接到本地服务器:

public void ConnectToSql(string ServerName, string UserName, string Password)
        {
            string strConnection = "server=" + tbServer + ";uid=" + tbUser + "; pwd=" + tbPwd;
            SqlCon = new System.Data.SqlClient.SqlConnection();
            SqlCom = new System.Data.SqlClient.SqlCommand();
            SqlCon.ConnectionString = strConnection;
            SqlCom.CommandType = System.Data.CommandType.Text;
            SqlCom.Connection = SqlCon;

            {
                try
                {
                    SqlCon.Open();

                }
                catch (Exception ex)
                {
                    MessageBox.Show("Failed to connect to data source");
                }


            }

我这样称呼它:

 private void Button_Click(object sender, RoutedEventArgs e)
        {
            ConnectToSql(tbServer.Text, tbUser.Text, tbPwd.Text);
        }

在 Windows 窗体中工作完美,但是当我在 WPF 中尝试时猜猜是什么,无法连接到本地服务器。有什么建议吗??

4

3 回答 3

3

快速解决方案:

替换这个:

string strConnection = "server=" + tbServer + ";uid=" + tbUser + "; pwd=" + tbPwd;

为了这:

string strConnection = "server=" + tbServer.Text + ";uid=" + tbUser + "; pwd=" + tbPwd.Text;

正确解决方案:

UI 不是数据。在 WPF 中编写单行代码之前学习 MVVM。不要在这样的程序代码中操作 UI 元素。创建一个合适的 ViewModel 并让您的 ViewModel 访问 DAL 并公开数据和逻辑。

此外,与古老的 ADO.Net 相比,您最好使用 ORM 并将所有 SQL 指令作为strings.

看在上帝的份上,请从后面的代码中删除它并创建一个适当的数据访问层。

于 2013-08-08T18:51:49.850 回答
2

进行有根据的猜测,您的问题可能出在这条线上:

public void ConnectToSql(string ServerName, string UserName, string Password)
{
    string strConnection = "server=" + tbServer + ";uid=" + tbUser + "; pwd=" + tbPwd;
    //...

您不是使用传递的参数构建连接字符串,而是使用 UI 项,这可能不会构建一个非常好的连接字符串。试试这个:

string strConnection = "server=" + ServerName + ";uid=" + UserName + "; pwd=" + Password;

我也同意 HighCore 所说的一切,这只是一个快速修复。

于 2013-08-08T18:52:08.227 回答
1

我建议使用 SqlConnectionStringBuilder,尝试像其他人在 WPF 或 WinForms 与您的问题无关之前所说的那样!

using (var cmd = new SqlCommand())
{
        cmd.CommandText = "Your Query"
        cmd.Connection = GetOpenDataConnection(".", "sampleDb", "sa", "12345");

        //Execute NonQuery or ExecuteReader
        cmd.Connection.Close();
}

private SqlConnection GetOpenDataConnection(string server, string database, string user, string password)
{
    var builder = new SqlConnectionStringBuilder();
    builder.DataSource = server;
    builder.InitialCatalog = database;
    builder.UserID = user;
    builder.Password = password;

    var connection = new SqlConnection(builder.ToString());
    connection.Open();
    return connection;
}
于 2013-08-08T18:54:55.480 回答