2

ファイルがダウンロードされるたびに、データベース内のテーブルを更新しようとしています。データベースはサンプル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 への接続を開けませんでした) .

私の主な質問は、ファイルがダウンロードされたときにこのテーブルの情報を更新できるように、この既定のデータベースに接続するにはどうすればよいかということです。

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 に答える