我在设置使用简单数据库实现的网站时遇到了问题

时间:2015-03-11 19:28:00

标签: c# asp.net database sqlite denied

这是我在这里的第一个问题,所以请耐心等待我。 :) 所以,我花了几个小时试图解决这个问题,但还没有找到解决方案。 问题很简单:

我正在使用Visual Studio 2013 Ultimate 90天试用版和ASP.Net Framework 4.5和C#来创建一个简单的网站,用户可以在其中创建一个帐户,这意味着他们的帐户数据需要保存到数据库。

我使用的数据库工具是SQLite,因为我读到这是一个很好的工具,可用于小型数据库。

因此,我的应用程序运行正常,直到我实际输入测试用户的信息并点击我的"创建帐户!"按钮。此时我的应用程序给了我以下错误:

----------------------------------------------- -----------------------------

  

访问路径' C:\ Program Files(x86)\ IIS   快递\ databaseFile.db3'被拒绝。

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

  

异常详细信息:System.UnauthorizedAccessException:访问   路径' C:\ Program Files(x86)\ IIS Express \ databaseFile.db3'被拒绝。

     

ASP.NET无权访问所请求的资源。考虑   授予对ASP.NET请求的资源访问权限   身份。 ASP.NET具有基本进程标识(通常是   IIS 5上的{MACHINE} \ ASPNET或IIS 6和IIS 7上的网络服务,以及   IIS 7.5上配置的应用程序池标识,如果使用的话   该申请不是冒充。如果申请是   冒充通过,身份将是   匿名用户(通常是IUSR_MACHINENAME)或经过身份验证的用户   请求用户。

     

要授予对文件的ASP.NET访问权限,请右键单击“文件”中的文件   资源管理器,选择"属性"并选择“安全”选项卡。点击"添加"   添加适当的用户或组。突出显示ASP.NET帐户,   并选中所需访问的框。

来源错误:

  

第28行:)&#34 ;;第29行:第30行:
  System.Data.SQLite.SQLiteConnection.CreateFile(" databaseFile.db3&#34);
  //创建将托管我们的数据库的文件第31行:
  使用(System.Data.SQLite.SQLiteConnection con = new   System.Data.SQLite.SQLiteConnection(" data source = databaseFile.db3"))   第32行:{

     

源文件:c:\ Users \ Alex \ Documents \ Visual Studio   2013 \ Projects \ WebDataBase \ WebDataBase \ SignUpForm.aspx.cs行:30

     

堆栈追踪:

     

[UnauthorizedAccessException:访问路径' C:\ Program Files   (x86)\ IIS Express \ databaseFile.db3'被拒绝。]
  System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)   +217 System.IO.FileStream.Init(String path,FileMode mode,FileAccess access,Int32 rights,Boolean useRights,FileShare share,   Int32 bufferSize,FileOptions选项,SECURITY_ATTRIBUTES secAttrs,   String msgPath,Boolean bFromProxy,Boolean useLongPath,Boolean   checkHost)+1305 System.IO.FileStream..ctor(String path,FileMode   模式,FileAccess访问,FileShare共享,Int32 bufferSize)+63
  System.Data.SQLite.SQLiteConnection.CreateFile(字符串   databaseFileName)+38 WebDataBase.SignUpForm.AddNewUser(String pw)   在c:\ Users \ Alex \ Documents \ Visual Studio中   2013 \项目\ WebDataBase \ WebDataBase \ SignUpForm.aspx.cs:30
  WebDataBase.SignUpForm.Button_CREATE_ACCOUNT_Click1(对象发送者,   EventArgs e)在c:\ Users \ Alex \ Documents \ Visual Studio中   2013 \项目\ WebDataBase \ WebDataBase \ SignUpForm.aspx.cs:71
  System.Web.UI.WebControls.Button.OnClick(EventArgs e)+9653178
  System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串   eventArgument)+103
  System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串   eventArgument)+10
  System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler   sourceControl,String eventArgument)+13
  System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)   +35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)   1724

----------------------------------------------- -----------------------------

好的,所以,我读到要解决这个问题,我只需要授予对数据库文件的访问权限,但我不能这样做,因为数据库文件还没有存在。 / p>

有人可以帮帮我吗?

谢谢! :d

哦,如果你需要,这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SQLite;

namespace WebDataBase
{
    public partial class SignUpForm : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected void AddNewUser(string pw)
        {
            string email = TextBox_EMAIL.Text;
            string username = TextBox_USERNAME.Text;

            string createTableQuery = @"CREATE TABLE IF NOT EXISTS [UserData] (
                          [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
                          [Email] NVARCHAR(30)  NULL,
                          [Username] NVARCHAR(12)  NULL,
                          [Password] NVARCHAR(12) NULL
                          )";

            System.Data.SQLite.SQLiteConnection.CreateFile("databaseFile.db3");        // Create the file which will be hosting our database
            using (System.Data.SQLite.SQLiteConnection con = new System.Data.SQLite.SQLiteConnection("data source=databaseFile.db3"))
            {
                using (System.Data.SQLite.SQLiteCommand com = new System.Data.SQLite.SQLiteCommand(con))
                {
                    con.Open();                             // Open the connection to the database

                    com.CommandText = createTableQuery;     // Set CommandText to our query that will create the table
                    com.ExecuteNonQuery();                  // Execute the query

                    com.CommandText = "INSERT INTO UserData (ID,Email,Username,Password) Values ('" + email + "','" + username + "','" + pw + "')";     // Add the first entry into our database 
                    com.ExecuteNonQuery();      // Execute the query
                    //com.CommandText = "INSERT INTO UserData (ID,Email,Username,Password) Values ('key two','value value')";   // Add another entry into our database 
                    // com.ExecuteNonQuery();      // Execute the query

                    com.CommandText = "Select * FROM UserData";      // Select all rows from our database table

                    using (System.Data.SQLite.SQLiteDataReader reader = com.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            string row = (reader["ID"] + " : " + reader["Email"] + " : " +
                                reader["Username"] + " : " + reader["Password"]);     // Display the value of the key and value column for every row
                            Label1.Text = row;
                        }
                    }
                    con.Close();        // Close the connection to the database
                }
            }

        }

        protected void Button_CREATE_ACCOUNT_Click1(object sender, EventArgs e)
        {
            Label1.Text = "";
            string pw = TextBox_PASSWORD.Text;
            string confirmedPw = TextBox_CONFIRM_PASSWORD.Text;

            // Check if "password" and "confirm password" values are the same
            if (pw.Equals(confirmedPw, StringComparison.Ordinal))
            {
                AddNewUser(pw);
            }
            else
            {
                Label1.Text = "Passwords are not matching.  Please make sure they are matching.";
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您需要为C:\Program Files (x86)\IIS Express\文件夹本身(我可能不推荐)提供应用程序权限,或者在项目文件夹中实际使用不同的文件夹(看起来像{{1}在你的情况下),这将是我的建议。