每次下载文件时,我都会尝试更新数据库中的表。数据库是我使用示例网站模板时创建的“DefaultConnection(WebsiteName)”。它是存储所有注册用户的数据库。我已将此表添加到该数据库中。
CREATE TABLE [dbo].[Download] (
[filename] NVARCHAR(50) NULL ,
[counter] INT NOT NULL DEFAULT 0 ,
);
我创建了一个 HTTP 处理程序,当我单击下载时它会被触发,并且在没有 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 filename=@filename", 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();
在线路上抛出一个异常,说它无法连接:
建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)。
我的主要问题是,如何连接到此默认数据库,以便在下载文件时更新此表中的信息。