我用VS2008开发一个软件,里面用SQL2005创建了一个数据库,在发布可执行文件时是把数据库和应用程序一起打包的,把安装包放到其他机器上安装时总是出错(在我的电脑上能正常安装),提示的错误是:
在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)
或者:
在建立与服务器的连接时出错。在连接到 sql server 2005 时 在默认的设置下 sql server 不允许进行远程连 (provider: TCP提供程序, error: 40 - 由于目标机器积极拒绝,无法连接)。
这个问题我搞了好多天了,也查了很多资料,还是没搞定,请各位大侠高台贵手,帮帮我~
我把VS2008的应用程序和数据库一起打包放到其他机器上去安装的做法是否正确呢?是不是对方的机器也一定要安装SQL2005数据库,还要做相应的配置?
代码如下:
private void ExecuteSql(string conn, string DatabaseName, string Sql)
{
SqlConnection mySqlConnection = new SqlConnection(conn);
SqlCommand Command = new SqlCommand(Sql, mySqlConnection);
mySqlConnection.Open();
mySqlConnection.ChangeDatabase(DatabaseName);
try
{
Command.ExecuteNonQuery();
}
finally
{
//close Connection
mySqlConnection.Close();
}
}
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
// ------------------------建立数据库-------------------------------------------------
try
{
// string connstr = String.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096;database=ACM618DeviceInfo", Context.Parameters["SERVER"], Context.Parameters["USER"], Context.Parameters["PWD"]);
string connstr = String.Format("server=.;user id=sa;password=111;persist security info=false;packet size=4096;");//database=ACM618DeviceInfo");
//根据输入的数据库名称建立数据库
ExecuteSql(connstr, "master", "create database" + Context.Parameters["dbname"]);
//调用osql执行脚本
Process sqlprocess = new System.Diagnostics.Process();
sqlprocess.StartInfo.FileName = "osql.exe ";
sqlprocess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -d {2} -i {3}ACM618DeviceInfo.sql", Context.Parameters["user"], Context.Parameters["pwd"], Context.Parameters["dbname"], Context.Parameters["targetdir"]);
sqlprocess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
sqlprocess.Start();
sqlprocess.WaitForExit(); // 等待执行
sqlprocess.Close();
//删除脚本文件
FileInfo sqlfileinfo = new FileInfo(String.Format("{0}ACM618DeviceInfo.sql", Context.Parameters["targetdir"]));
if (sqlfileinfo.Exists)
{
sqlfileinfo.Delete();
}
}
catch (Exception ex)
{
throw ex;
}
}
你在待安装的目标机器上telnet下看看如何?
客户端可以安装SQL Server 2005/2008 Express
你打包时也应该创建一个能识别的数据库,虽然后缀名也是mdf,但请注意连接字符串的不同。而且SQL Server 2005 Express与SQlL server 2005企业版对应的MDF文件格式是不同的。
关于连接串,请看
http://www.connectionstrings.com/sql-server-2005
或者用专用的打包工具如IinstallShield等打上SQL Server Express 2005
你上面的做法没有问题,是通常做法
如果报错,检查防火墙,网络问题,另外换成实例名试试看,还有你的数据库是否采取了混合登录