2013-04-06 3 views
2

Я пытаюсь обновить таблицу в базе данных при каждом скачивании файла. База данных - это «DefaultConnection (WebsiteName)», которая была создана, когда я использовал образец шаблона веб-сайта. Это база данных, в которой хранятся все зарегистрированные пользователи. Я добавил эту таблицу в эту базу данных.Подключиться к базе данных SQL Server Express с помощью HTTP-обработчика

CREATE TABLE [dbo].[Download] (
    [filename] NVARCHAR(50) NULL , 
    [counter] INT NOT NULL DEFAULT 0 , 
); 

Я создал HTTP Handler, что увольняют, когда я нажимаю скачать и работает без подключения SQL части:

<%@ WebHandler Language="C#" Class="Download" %> 

using System; 
using System.Web; 
using System.IO; 
using System.Data; 
using System.Data.SqlClient; 
using System.Web.Configuration; 

public class Download : IHttpHandler { 

    SqlConnection conn; 
    SqlCommand cmd; 

     private string FilesPath 
     { 
      get 
      { 
       return @"path to directory holding files"; 
      } 
     } 

     public void ProcessRequest(HttpContext context) 
     { 
      string fileName = context.Request.QueryString["filename"]; 
      if (!string.IsNullOrEmpty(fileName) && File.Exists(FilesPath + fileName)) 
      { 
       context.Response.ContentType = "application/octet-stream"; 
       context.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=\"{0}\"", fileName)); 
       context.Response.WriteFile(FilesPath + fileName); 

       //connect to the db 

       conn = new SqlConnection(
       "Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-websiteName-20130405020152;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-websiteName-20130405020152‌​.mdf"); 
       //the sql command to increment counter by 1 
       cmd = new SqlCommand("UPDATE counter SET counter = counter+1 WHERE [email protected]", conn); 
       cmd.CommandType = CommandType.Text; 
       cmd.Parameters.AddWithValue("@filename", "Default"); 

       using (conn) 
       { 
        //open the connection 
        conn.Open(); 
        //send the query 
        cmd.ExecuteNonQuery(); 
       } 
       conn.Close(); 
      } 
      else 
      { 
       context.Response.ContentType = "text/plain"; 
       context.Response.Write(FilesPath + fileName + " Invalid filename"); 
      } 
     } 

     public bool IsReusable { 
      get { 
       return false; 
      } 
     } 
    } 

Я не могу получить его, чтобы соединиться с любыми соединительными струнами я могу найти. Я попробовал тот, который показан в «web.config». Он всегда будет пытаться соединиться на некоторое время, но затем бросает исключение на conn.Open(); линии заявив, что не может подключиться:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) .

Мой главный вопрос в том, как подключиться к этой базе данных по умолчанию, так что я могу обновите информацию в этой таблице при загрузке файла.

+1

Что означает сообщение об ошибке? – usr

+0

@usr С строкой соединения, которую я вижу, щелкнув правой кнопкой мыши -> Свойства: произошла связанная с сетью или конкретная ошибка экземпляра при установлении соединения с SQL Server. Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения. (поставщик: поставщик Named Pipes, ошибка: 40 - не удалось открыть подключение к SQL Server) –

ответ

0

мне удалось подключиться к нему, наконец, с помощью этого:

conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString); 
0

В вашей строке подключения не указано имя файла db. Пожалуйста, получите строку подключения для локальной БД здесь http://msdn.microsoft.com/en-us/library/hh510202.aspx

+0

Извините, что в OP это была только одна из последних попыток. Как я уже сказал, я попытался использовать строку соединения, указанную в «web.config», и я все равно получаю ту же ошибку. Я тоже не могу понять эту ссылку, извините. –

+0

Ссылки работают отлично. Мне было бы интересно увидеть вашу строку подключения в web.config. – qamar

+0

Я имею в виду, что я не могу полностью исключить информацию, представленную в этой ссылке. Строка подключения в «web.config»: «Источник данных = (LocalDb) \ v11.0; Начальный каталог = aspnet-websiteName-20130405020152; Интегрированная безопасность = SSPI; AttachDBFilename = | DataDirectory | \ aspnet-websiteName-20130405020152.mdf" И тот, который я вижу, щелкнув правой кнопкой мыши -> Свойства: «Источник данных = (LocalDb) \ v11.0; AttachDbFilename =« C: \ Users \ имя_пользователя \ Документы \ Visual Studio 2012 \ WebSites \ websiteName \ App_Data \ aspnet -websiteName-20130405020152.mdf "; Initial Catalog = aspnet-websiteName-20130405020152; Integrated Security = True" –