2

每次下载文件时,我都会尝试更新数据库中的表。数据库是我使用示例网站模板时创建的“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 的连接)。

我的主要问题是,如何连接到此默认数据库,以便在下载文件时更新此表中的信息。

4

2 回答 2

0

您的连接字符串中没有附加的 db 文件名。请从这里获取本地数据库的连接字符串http://msdn.microsoft.com/en-us/library/hh510202.aspx

于 2013-04-06T09:18:21.017 回答
0

我最终设法使用它连接到它:

conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
于 2013-04-06T11:54:57.777 回答