【问题标题】:Connecting C# to SQL Server Compact database将 C# 连接到 SQL Server Compact 数据库
【发布时间】:2013-03-01 12:06:20
【问题描述】:

您好,我正在尝试将 SQL Server 紧凑型数据库连接到我的程序,我想要一个从数据库中删除所有条目的按钮,当我按下所述按钮时,程序抛出异常并给出以下错误消息“A network - 建立与 SQL Server 的连接时发生相关或特定于实例的错误。找不到服务器或无法访问该服务器。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL Network Interfaces ,错误:26 - 定位服务器/指定实例时出错)”

请帮忙? =]

对不起,代码在下面 =]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.SqlServerCe;


namespace Booking_system_Final
{
    public partial class PendingJobs : Form
    {
        SqlConnection sc = new SqlConnection("Data Source=C:\\Users\\Administrator\\My Documents\\BMS_Data.sdf");
        public PendingJobs()
        {
            InitializeComponent();
        }

        private void PendingJobs_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'bMSDataSet.Bookings' table. You can move, or remove it, as needed.
            this.bookingsTableAdapter.Fill(this.bMSDataSet.Bookings);
            // TODO: This line of code loads data into the 'bMS_DataDataSet1.Bookings' table. You can move, or remove it, as needed.


        }

        private void button1_Click(object sender, EventArgs e)
        {
            sc.Open();
            SqlCommand cmd = new SqlCommand("DELETE FROM Bookings");
            cmd.Connection = sc;
            cmd.ExecuteNonQuery();
            sc.Close();
            MessageBox.Show("Database Cleared");


        }
    }
}

【问题讨论】:

  • 那么让我们看看一些代码。另外,你能在 SQL Server Management Studio 中打开它吗?
  • 您是否传递了正确的凭据,指向正确的 SQL Server 实例和数据库?
  • 我指向的是本地存储的 SQL server Compact 数据库,目录名是正确的
  • 这通常是因为 sdf 文件不存在。是吗?
  • 是的,我在 Windows 资源管理器中检查了目录,并且 SDF 文件在那里,连接字符串直接指向该文件,我看不出我在哪里出错了

标签: c# sql sql-server-ce


【解决方案1】:

尝试使用SqlCeConnection 类而不是SqlConnection

SqlCeConnection sqlConnection1 = new SqlCeConnection();
sqlConnection1.ConnectionString = "Data Source = C:\\Users\\Administrator\\My Documents\\BMS_Data.sdf;Persist Security Info=False";

【讨论】:

  • LAN的情况下如何修改数据源?假设.sdf 位于共享网络上,为\\xyz-PC\db\dbfile.sdf
【解决方案2】:

如果要连接到 SQL Server Compact,请使用 SqlCeConnection、SqlCeCommand 等。添加对 SQL Server Compact ADO.NET 提供程序 System.Data.SqlServerCe.dll 的引用

【讨论】:

    【解决方案3】:

    看看这篇博文:SQL SERVER – FIX : ERROR : (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server)

    这一步一步地介绍了您可能需要做的事情:

    简而言之:

    1. SQL Server 应该已启动并正在运行。
    2. 在 SQL Server 配置中启用 TCP/IP
    3. 在 Windows 防火墙中打开端口
    4. 启用远程连接
    5. 启用 SQL Server 浏览器服务
    6. 在防火墙中创建 sqlbrowser.exe 的异常
    7. 重新创建别名

    关于每个步骤的位置和操作,您将在文章中找到更深入的信息。

    您可能还想看看Connection strings for SQL Server Compact。在那里,您可以找到可以尝试使用的连接字符串的其他变体。

    【讨论】:

    • 感谢您的详细回答,我找到了问题的根源,即 SQL 服务器由于某种原因无法连接,我现在收到一条错误消息,提示“远程过程调用失败”
    • @ReeceCottam:我对此并不完全熟悉,remote procedurestored procedure 一样吗?如果是这样,这是 CE 版本可能不支持的功能:查看此功能比较表的底部:(SQL Server Compact、SQL Server Express 2012 和 LocalDB 的比较)[erikej.blogspot.de/2011/01/… 其中说"存储过程、视图、触发器:否"
    【解决方案4】:

    您似乎使用了错误的连接字符串。 (或者文件路径错误)。查看http://www.connectionstrings.com/sql-server-ce 了解连接字符串选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 2013-07-08
      相关资源
      最近更新 更多