ファイルがダウンロードされるたびに、データベース内のテーブルを更新しようとしています。データベースはサンプルWebサイトテンプレートを使用した際に作成した「DefaultConnection(WebsiteName)」です。登録されたすべてのユーザーを格納するデータベースです。このテーブルをそのデータベースに追加しました。
CREATE TABLE [dbo].[Download] (
[filename] NVARCHAR(50) NULL ,
[counter] INT NOT NULL DEFAULT 0 ,
);
ダウンロードをクリックすると起動し、SQL 接続部分なしで動作する HTTP ハンドラーを作成しました。
<%@ 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 への接続を開けませんでした) .
私の主な質問は、ファイルがダウンロードされたときにこのテーブルの情報を更新できるように、この既定のデータベースに接続するにはどうすればよいかということです。