我创建了一个C#程序,它在Visual Studio 2010中有一个SQL Server数据库,我为此创建了一个安装程序。
在我的计算机上,当我安装程序时,它运行没有任何问题。但是,当我在另一台计算机上安装它时,程序安装成功,但程序的数据库无法运行,程序有一些数据库问题。我为此安装了.NET Framework 4,但问题并没有消失。
需要在另一台计算机上安装哪个组件(如.NET Framework 4)才能运行我的程序?
class db
{
public string UserName="";
public string Password="";
private SqlConnection con;
private SqlCommand cmd;
private SqlDataAdapter da;
public db()
{
con = new SqlConnection();
cmd = new SqlCommand();
da = new SqlDataAdapter();
cmd.Connection = con;
da.SelectCommand = cmd;
}
public void Connect()
{
string cs = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\my.mdf;Integrated Security=True;User Instance=True";
con.ConnectionString = cs;
con.Open();
}
public void Disconnect()
{
con.Close();
}
//Select Command
public DataTable Select(string sql)
{
DataTable dt = new DataTable();
cmd.CommandText = sql;
da.Fill(dt);
return dt;
}
//Insert , Update , Delete
public void Docommand(string sql)
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
}
答案 0 :(得分:4)
简短的回答是,您的程序正好需要您在源代码中使用的那些组件。
.NET Framework 4在大多数当前的Windows计算机上都可用,因此很可能,这不是问题(但您可能仍希望确保目标计算机确实具有.NET 4,而不仅仅是.NET 3.5 。)
考虑目标计算机上默认安装的组件更为重要。例如,这包括SQL Server 2008. SQL Server虽然来自Microsoft,但它是一个独立的产品,而不是 .NET Framework的一部分。即使您安装了.NET 4,也不仅仅解决了数据库问题。
不幸的是,您还没有说过您是否有SQL Server或SQL Server Compact Edition数据库(后者只是一个可以与您的程序一起部署的文件,而前者是作为一个系统服务运行的)服务器)。
在任何一种情况下,请确保每台目标计算机都可以访问该数据库。这意味着:
如果它是本地SQL Server数据库(在运行应用程序的同一台机器上),则需要在每台目标计算机上安装SQL Server。 (我们这里不是在谈论SQL Server CE,而是关于成熟的服务器产品!)
如果它是可公开访问的网络服务器上的数据库,请确保您已获得有效的连接字符串,并且已正确设置访问权限。
<强>更新强>
让我们来看看你的连接字符串:
string cs = "Data Source=.\\SQLEXPRESS;AttachDbFilename=…\\my.mdf;…";
从这一点来看,似乎......
您已在自己的计算机上安装了SQL Server 2008 Express,并且您已创建了一个存储在文件my.mdf
中的数据库,该文件位于程序的二进制文件夹中(例如bin/Release
)。
您已设置程序,以便通过直接访问数据库文件my.mdf
连接到数据库。
现在,当您将程序提供给其他人时,您的程序将与您在计算机上执行的程序完全相同:它将尝试从程序的二进制文件夹中的my.mdf
数据库文件中打开数据库。
如果不满足以下任何条件,此过程将在目标计算机上失败:
未安装SQL Server 2008 Express。即使您直接访问数据库,仍然需要SQL Server 2008 Express才能使数据库访问工作。
my.mdf
不会被复制到程序的输出文件夹中。您可以通过打开程序的解决方案轻松检查,然后切换到 Solution Explorer ,并查看my.mdf
的属性。 复制到输出文件夹是否设置为始终或如果更新
在不知道您的程序的确切目的的情况下,我建议您查看SQL Server Compact Edition。与SQL Server Express不同,目标用户不必安装它; SQL Server Compact Edition作为.NET Framework的一部分部署到目标计算机,或者(如果不是)作为程序二进制文件夹中的附加程序集。而不是.mdf
文件,您的数据库将驻留在.sdf
文件中,并且某些数据库功能将丢失(可能是复制等高级内容,您通常不需要简单的程序)。
答案 1 :(得分:1)
要安装进一步的改进,至少如果您使用SQL Server Express到SQL Server数据库并验证路径和所有与连接字符串有关的内容,如果您使用的是sql compact,则无法安装它,您只需要在你的项目中引用这个dll
http://msdn.microsoft.com/en-us/library/aa983326.aspx
http://support.microsoft.com/kb/319291/it
问候。
答案 2 :(得分:1)
首先,您应该查看this question on stackoverflow
然后我建议使用ClickOnce:
How to Deploy SQL Server Compact Edition With C# Application
This threads points to two other threads about handling deploying data in a ClickOnce deployment:
如果您想查看设置&amp;部署包(在Visual Studio的Express版本中不可用),您可以查看以下链接:
http://support.microsoft.com/kb/307353