这是我在这里的第一个问题,所以请耐心等待我。 :) 所以,我花了几个小时试图解决这个问题,但还没有找到解决方案。 问题很简单:
我正在使用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.";
}
}
}
}
答案 0 :(得分:1)
您需要为C:\Program Files (x86)\IIS Express\
文件夹本身(我可能不推荐)提供应用程序权限,或者在项目文件夹中实际使用不同的文件夹(看起来像{{1}在你的情况下),这将是我的建议。