所以我使用此代码进行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?
答案 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;
}