2012-08-17 48 views
2

我开发了一个应用程序,其中有一个滑块,显示来自 SQL数据库的一些数据。我正在使用Visual Studio 2010和Microsoft SQL Server 2008.如何在没有安装SQL Server的计算机上运行带有SQL数据库的应用程序

事实上,当我将它部署到我的个人计算机上时,我的应用程序没有遇到任何问题。 当我在另一台机器上尝试它时出现问题,问题是应用程序无法连接到SQL数据库。我试图找出问题的原因,所以我在两台计算机上部署后尝试了它,其中一台安装了SQL服务器,另一台没有SQL Server。 该应用程序在安装了SQL Server的计算机上工作完美,并且无法连接到另一台计算机上的数据库。

这是连接字符串我在我的应用程序中使用>>

的connectionString =“数据 源= \ SQLEXPRESS; AttachDbFilename = | DataDirectory目录| \ KBank.mdf;集成 安全= TRUE;用户实例=真“

所以如果有一种方式可以使我运行应用程序,而不需要机器安装SQL Server,我将不胜感激。谢谢

+1

您正在寻找一个嵌入式数据库。看看SqlCE和SQLite。 – 2012-08-17 12:50:51

+1

您是否需要在本地网络上的用户之间共享单个数据库,或者您的应用程序的每个用户都有自己的数据库? – Steve 2012-08-17 12:54:29

+0

@Steve它是用户之间共享的相同数据库。 它不会被改变。 – Hassanation 2012-08-17 13:51:38

回答

3

您需要更改连接字符串以指定安装数据库的计算机。像下面这样:

的connectionString = “数据源=机\ SQLEXPRESS; AttachDbFilename = | DataDirectory目录| \ KBank.mdf;集成安全性=真;用户实例=真”

请注意:另一台机器上的数据库需要正确配置,以便可以从其他机器访问。

+0

应用程序将公开,我的意思是它不是为本地网络知道客户端机器的名称,有没有什么办法让机器使用连接字符串附加用户的名称? 和你喜欢什么,使用SQLite或按照你的建议修改连接字符串? – Hassanation 2012-08-17 13:36:13

+1

这完全取决于每个安装是否需要自己的数据库,或者所有安装需要共享相同的数据库。 – 2012-08-17 13:43:17

+0

这是所有应用程序用户的相同数据库。 – Hassanation 2012-08-17 13:45:59

1

您的连接字符串正在使用本地主机,它通过连接字符串中的.表示。如果机器没有安装SQL Server,这将不起作用,因此您需要将连接字符串更改为远程机器(具有SQL Server安装的机器,即您的个人计算机)。

+0

所以我该怎么做? – Hassanation 2012-08-17 13:39:38

+0

@Hassan - 您需要将连接字符串更改为使用SQL Server安装的计算机的IP地址:connectionString =“Data Source = 0.0.0.1 \ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ KBank.mdf; Integrated Security = True; User Instance = True“ – 2012-08-17 14:34:29

+0

其中,0.0.0.1是SQL Server所在机器的IP地址。 – 2012-08-17 14:34:51

1

如果你不想安装SQL Server Express,你可以通过sql server compact(http://en.wikipedia.org/wiki/SQL_Server_Compact)去找一个嵌入式SQL服务器,或者也可以使用一个实际的网络数据库可用。

+0

我已经尝试过SQL Server Compact 3.5并且发生了同样的问题。 应用程序要求我在用户机器上安装sql server compact .. – Hassanation 2012-08-26 13:01:04

+0

我的连接字符串是Data Source = | DataDirectory | \ KBank.sdf;加密数据库= True;文件模式=共享读取; Persist Security Info = False – Hassanation 2012-08-26 13:02:20

+0

应用程序适用于我的机器,但错误发生在用户机器>>谢谢 – Hassanation 2012-08-26 13:03:41

1

你需要做以下之一:

  • 包括SQL Server Express中的客户机上安装的安装过程
  • 使用服务器上的集中式SQL Server的一部分,你和你的客户有机会获得

还有其他的,你可以使用数据访问策略,如串行数据为XML,或使用不同的数据库就像SQLite或使用Web服务,但简单地说,如果SQL Server Express没有安装在客户机上,你不能强制它工作。

+0

如果我使用SQLite那里不需要在客户机上安装SQL Server,不是吗? – Hassanation 2012-08-17 13:33:16

+1

不需要。SQLite是与SQL Server Express或SQL Server完全不同的产品。你的代码需要改变,你需要阅读SQLite文档,但是如果你想要一个没有设置的小本地数据库,这是一个选项。我会从这里开始http://decoding.wordpress.com/2009/01/14/using-sqlite-with-net/以及谷歌“从.net使用sqlite” – David 2012-08-17 16:05:00

0

如果在服务器计算机上使用centerl数据库并且其他所有客户端计算机都可以访问该服务器。

如果这是你可以做以下的方法:

首先你改变你的程序写入文件DSN在启动硬盘了程序的

使用下面的代码示例

private void MakeDSN() 
     { 
      try 
      { 
       if (!System.IO.Directory.Exists(@"C:\OTPub")) 
       { 
        System.IO.Directory.CreateDirectory(@"C:\OTPub"); 
       } 

       if (File.Exists(@"C:\OTPub\Ot.dsn")) //delete ErrorLogFile 
       { 
        File.SetAttributes(@"C:\OTPub\Ot.dsn", FileAttributes.Temporary); 
        File.Delete(@"C:\OTPub\Ot.dsn"); 
       } 
       string con = "[ODBC]"; 
       string driver = "DRIVER=SQL Server"; 
       string uid = "UID=sa"; 
       string DB = "DATABASE=OTData"; 
       string server = "SERVER=10.63.210.111"; 

       var tw = new StreamWriter(@"C:\OTPub\Ot.dsn", true); // make file in location 
       using (tw) 
       { 
        tw.WriteLine(con); //write dataline 
        tw.WriteLine(driver); 
        tw.WriteLine(uid); 
        tw.WriteLine(DB); 
        tw.WriteLine(server); 
       } 

       lbserver.Text="LOGIN "+server; 
      } 
      catch (Exception) 
      { 
       MessageBox.Show("File DSN Error!"); 
      } 
     } 

输入服务器IP作为string server

现在,您可以使用单独的类连接

using System.Data.Odbc; 

    class DataBaseConnection 
    { 
     private OdbcConnection conn1 = new OdbcConnection(@"FILEDSN=C:/OTPub/Ot.dsn;" + "Uid=sa;" + "Pwd=123;"); 

     //insert,update,delete 
     public int SetData(string query) 
     { 
      try 
      { 
       conn1.Open(); 
       OdbcCommand command = new OdbcCommand(query, conn1); 
       int rs = command.ExecuteNonQuery(); 
       conn1.Close(); 
       return rs; 
      } 
      catch (Exception ex) 
      { 
       conn1.Close(); 
       throw ex; 
      } 
     } 

     //select 
     public System.Data.DataTable GetData(string sql) 
     { 
      try 
      { 
       conn1.Open(); 
       OdbcDataAdapter adpt = new OdbcDataAdapter(sql, conn1); 
       DataTable dt = new DataTable(); 
       adpt.Fill(dt); 
       conn1.Close(); 
       return dt; 
      } 
      catch (Exception ex) 
      { 
       conn1.Close(); 
       throw ex; 
      } 
     } 
    } 

现在,你可以写下面的代码你的不同需要的地方连接到数据库,

DataBaseConnection db = new DataBaseConnection(); 

如果您需要SELECT查询:

DataTable dt = db.GetData("SELECT * From TestTable"); 

如果你需要插入,更新,删除查询

int i=db.SetData("INSERT INTO TestTable(name,address,tel) VALUES (testname,Colombo,0777125896) "); 

此方法可以使用con不需要任何配置就可以访问数据库。

重要提示:请记住在出于安全目的退出应用程序时删除DSN文件。

希望这会帮助你!

相关问题