SQL连接WPF

时间:2013-08-08 18:47:21

标签: c# sql sql-server

所以我使用此代码进行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中尝试它时会发生什么,无法连接到本地服务器。 任何sugestions?

3 个答案:

答案 0 :(得分:3)

快速解决方案:

替换这个:

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

为此:

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

正确的解决方案:

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

此外,最好使用ORM而不是古老的ADO.Net,并将所有SQL指令放在strings

请为基督的清酒,从后面的代码中删除它,并创建一个正确的数据访问层。

答案 1 :(得分: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所说的一切,这只是一个快速修复。

答案 2 :(得分: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;
}