Asp.net无法连接到MSSQL

时间:2014-06-19 05:32:06

标签: asp.net sql sql-server database-connection

当我尝试使用MSSQL在asp.net中启动Web项目时,似乎无法连接到我的数据库。错误消息是:

A network related or instance specific error occurred while establishing a connection to SQL server...

但是当我尝试运行以前的项目时,它可以运行。但是,当我选择所有程序 - > Microsoft SQL Server 2008 - >配置工具 - > SQL Server配置管理器 - > SQL Server服务。它没有列出所有服务,而是向我显示一个错误,即远程过程调用失败。

我想知道如何修复它,因为它只发生在我的一个项目中。提前谢谢。

Snapshots of SQL Server Configuration Manager

Snapshots of services

我的web.config代码:

修改

    <?xml version="1.0" encoding="UTF-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="GeospatialChallenge2014.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <system.web>
    <webServices>
      <protocols>
        <add name="HttpSoap" />
        <add name="HttpGet" />
        <add name="HttpPost" />
      </protocols>
    </webServices>
    <compilation debug="true" targetFramework="4.0">
    </compilation>
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" />
  </system.web>

  <connectionStrings>
    <add name="GeospatialChallengeConnectionString" connectionString="Data Source=(local);Initial Catalog=SAFETY_AT_SG_DATABASE.mdf;"
    providerName="System.Data.SqlClient" />
  </connectionStrings>

  <applicationSettings>
    <GeospatialChallenge2014.Properties.Settings>
      <setting name="GeospatialChallenge2014"
        serializeAs="String">
        <value>http://localhost/SgDataService.asmx</value>
      </setting>
    </GeospatialChallenge2014.Properties.Settings>
  </applicationSettings>
  <system.webServer>
    <directoryBrowse enabled="true" />
  </system.webServer>
</configuration>

我的连接字符串:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

using System.Xml;

namespace Geospatial_Challenge_2014
{
    /// <summary>
    /// Summary description for SgDataService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class SgDataService : System.Web.Services.WebService
    {

        [WebMethod]
        public DataSet GetTrafficByDateTime(string StartDateTime, string EndDateTime)
        {
            //System.Data.SqlClient.SqlConnection myConn = new System.Data.SqlClient.SqlConnection();
            //myConn.ConnectionString = @"Data Source=(local);Initial Catalog=SAFETY_AT_SG_DATABASE.MDF;Integrated Security=True";
            SqlConnection myConn = new SqlConnection(ConfigurationManager.ConnectionStrings["GeospatialChallengeConnectionString"].ConnectionString);
            SqlDataAdapter myAdapter = new SqlDataAdapter("Select * from dbo.Traffic where Convert(DateTime,([date]+' '+[time])) >= @StartDateTime AND Convert(DateTime,([date]+' '+[time])) <= @EndDateTime;", myConn);
            myAdapter.SelectCommand.Parameters.AddWithValue("@StartDateTime", StartDateTime);
            myAdapter.SelectCommand.Parameters.AddWithValue("@EndDateTime", EndDateTime);
            DataSet ds = new DataSet();
            myConn.Open();
            myAdapter.Fill(ds, "Traffic");
            myConn.Close();
            return ds;
        }
    }
}

3 个答案:

答案 0 :(得分:2)

要检查的事项:

  1. 确保将数据库引擎配置为接受远程连接 •开始&gt;所有程序&gt; SQL Server 2005&gt;配置工具&gt; SQL Server表面区域配置 •单击“服务和连接的表面区域配置” •选择出现问题的实例&gt;数据库引擎&gt;远程连接 •启用本地和远程连接 •重新启动实例

  2. 检查SQL Server服务帐户 •如果您未使用域帐户作为服务帐户(例如,如果您使用的是NETWORK SERVICE),则可能需要先进行此操作才能继续

  3. 如果您使用的是命名SQL Server实例,请确保在ASweb P.NET应用程序的连接字符串中使用该实例名称 •通常,指定数据库服务器所需的格式为machinename \ instancename •检查您的连接字符串

  4. 4.您可能需要在防火墙上为您正在使用的SQL Server实例和端口创建例外 •开始&gt;运行&gt; FIREWALL.CPL •单击例外选项卡 •添加sqlservr.exe(通常位于C:\ Program Files(x86)\ Microsoft SQL Server \ MSSQL.x \ MSSQL \ Binn)和端口(默认为1433) •检查您的连接字符串

    1. 如果您使用的是命名的SQL Server实例,请确保在连接字符串中使用该实例名称

    2. 检查SQLBrowser;检查它是否正在运行。您可能还需要在防火墙中为SQLBrowser创建一个例外。

    3. 检查您是否已连接到SQL Server。请注意您用于连接的内容:计算机名称,域名或IP地址?检查连接时使用此选项。例如,如果您正在使用myserver •开始&gt;运行&gt; CMD •netstat -ano | findstr 1433 •telnet myserver 1433 •ping -a myserver

    4. 检查返回IP地址的端口。

      替代: 如果仍然无法建立任何连接,您可能希望在服务器上创建一个SQL帐户,在相关数据库上创建相应的SQL用户,并在Web应用程序中使用此用户名/密码组合。

答案 1 :(得分:0)

这些是摆脱此类错误的可能方法,

  1. 以这种方式更改连接字符串, 数据源=(本地)\ SQLEXPRESS;初始目录= SAFETY_AT_SG_DATABASE.MDF;集成安全性=真

  2. 尝试删除连接字符串中的.mdf扩展名。只需添加数据库。

  3. 您必须授予访问数据库的权限,即在sql server中,Open Security =&gt;登录=&gt;右键单击=&gt;新登录=&gt;给出正确的名称=&gt;然后点击user mapping =&gt;选择您的数据库名称=&gt;给予权限,如执行,选择(2005)或datareader,数据编写器和儿子......

  4. 或者打开sql服务配置。在此启用Tcp / Ip协议中,如果它处于停止状态,则启动Sql server Broswer。

  5. 可能在某个时候,防火墙会阻止这个sql server浏览器。所以让它禁用并尝试。

  6. 以这种方式更改连接字符串,

      <connectionStrings>
    <add name="GeospatialChallengeConnectionString" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=SAFETY_AT_SG_DATABASE;Integrated Security = True"
    providerName="System.Data.SqlClient" />
    

答案 2 :(得分:0)

Dude在web.config中定义连接字符串并尝试.Like,

<connectionStrings>
<add name="DBConnection" connectionString="Data Source=yourservername;Initial    
Catalog=DBname;User ID=sa;Password=yourpassword" 
providerName="System.Data.SqlClient" />
</connectionStrings>

并在您的方法内部将连接字符串调用为

SqlConnection objConnection = new SqlConnection();//sql connection object
objConnection.ConnectionString = ConfigurationManager.ConnectionStrings
["DBConnection"].ConnectionString; //conn string name as in config file
SqlCommand cmd = new SqlCommand("YourStoredprocedure", objConnection);