Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用IIS在服务器上发布asp net网站_C#_Asp.net_Iis - Fatal编程技术网

C# 使用IIS在服务器上发布asp net网站

C# 使用IIS在服务器上发布asp net网站,c#,asp.net,iis,C#,Asp.net,Iis,我创建了一个网站。它是一个登录页,在调试时可以正常工作,但当我将其部署到服务器上时,出现了一个奇怪的错误。当我单击“登录”时,出现了以下错误: Invalid column name 'aa'. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information ab

我创建了一个网站。它是一个登录页,在调试时可以正常工作,但当我将其部署到服务器上时,出现了一个奇怪的错误。当我单击“登录”时,出现了以下错误:

     Invalid column name 'aa'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Invalid column name 'aa'.

Source Error:


Line 33: 
Line 34:                 DataSet ds = new DataSet();
Line 35:                 dataAdapter.Fill(ds);
Line 36:                 DataTable dt = ds.Tables[0];
Line 37: 


Source File: c:\inetpub\wwwroot\login.aspx.cs    Line: 35

Stack Trace:


[SqlException (0x80131904): Invalid column name 'aa'.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +388
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +717
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4515
   System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +61
   System.Data.SqlClient.SqlDataReader.get_MetaData() +134
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +6557689
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +6560327
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +586
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +104
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +288
   System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +171
   System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +15
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +325
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +420
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +275
   login.ValidateUser(Object sender, EventArgs e) in c:\inetpub\wwwroot\login.aspx.cs:35
   System.Web.UI.WebControls.Login.AttemptLogin() +160
   System.Web.UI.WebControls.Login.OnBubbleEvent(Object source, EventArgs e) +93
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +84
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3804


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.342
正如我所料,它一定是登录错误,但它出现了此错误。以下是我的代码:

 protected void ValidateUser(object sender, EventArgs e)
{
    int userId = 0;
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        string query = "SELECT [OBJECTID] from dbo.OWNER where [owner_id]=" + Login1.UserName;
        using (SqlDataAdapter dataAdapter = new SqlDataAdapter(query, con))
        {

            con.Open();


            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);


            DataSet ds = new DataSet();
            dataAdapter.Fill(ds);
            DataTable dt = ds.Tables[0];

            userId = Convert.ToInt32(dt.Rows[0][0]);
            if (userId.ToString() != Login1.Password)
            {
                userId = -1;

            }
            con.Close();
        }
        switch (userId)
        {
            case -1:
                Login1.FailureText = "نام کاربری یا کلمه عبور صحیح نیست";
                break;
            case 0:
                Login1.FailureText = "نام کاربری یا کلمه عبور صحیح نیست";
                break;
            case -2:
                //Login1.FailureText = "Account has not been activated.";
                break;
            default:
                FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
                break;
        }
    }
下面是web.config文件中的数据库连接:

你认为问题出在数据库连接上吗?我可以用这个连接运行调试,但当我将它们复制到wwwroot时,会产生问题。我应该将数据库添加到IIS或类似的东西吗

非常感谢你的帮助

您的连接似乎工作正常,因为堆栈跟踪中显示的列名“aa”无效。但是您的查询没有此列。它只有OBJECTID


如果出于某种原因在查询中添加列aa并部署带有该错误的代码,则可能会发生这种情况。

除非Login1.UserName是一个数字,否则这在dev中也不起作用。您的查询没有正确参数化,并且没有引号,因此,如果您在用户名框中键入aa,则查询将从dbo.OWNER中读取SELECT[OBJECTID],其中[OWNER\u id]=aa

如果您试图运行这个查询,它会认为aa是一个列名,而不是一个实际值

参数化您的查询,您应该不会有问题

编辑

不知何故,我找不到一个好的、简短的、简单的教程来使用C中的参数化查询。这里简单介绍一下:

在编写查询时,将变量作为占位符输入,以便稍后传入值。在C中执行该命令时,将填充这些变量。这使您的代码能够安全地防止SQL注入—有人通过将SQL语句注入到您的查询中来执行不需要的脚本,这也意味着您不必担心所有的引号

在C语言中,使用数据集的方式类似于:

using (var con = new SqlConnection(constr))
{
    con.Open();
    string query = "SELECT [OBJECTID] from dbo.OWNER where [owner_id] = @OwnerID";
    using (var com = new SqlCommand(query, con))
    {
        com.Parameters.AddWithValue("@OwnerID", Login1.UserName);
        using (var da = new SqlDataAdapter(com))
        {
            var ds = new DataSet();
            da.Fill(ds);
            Console.WriteLine(ds.Tables[0].Rows[0][0]);
        }
    }
}

编写相同代码的方法有几十种不同的构造函数、不同的检索数据的方法等等,但重要的是不要让用户输入直接进入查询文本,而是将参数附加到查询中。

但正如在我的代码中一样,查询类似于字符串query=SELECT[OBJECTID]来自dbo.OWNER,其中[OWNER\u id]=+Login1.UserName;sss代替了Login1.UserName。我不知道为什么查询会改变?我说当你部署列aa时,aa可能已经在那里了。这是唯一的原因。再次部署代码,您将不会看到此错误。请执行干净的生成并部署最新的DLL。在部署之前,请检查这些文件的日期时间属性。您可以部署一个旧版本,但我以前没有任何sss或其他查询。我将尝试再次部署它。我希望它可以正常工作。非常感谢您所说的这是我的问题。我如何将其参数化?您能帮我吗?还有,我将连接字符串中的服务器更改为本地主机是否会影响加载速度?
using (var con = new SqlConnection(constr))
{
    con.Open();
    string query = "SELECT [OBJECTID] from dbo.OWNER where [owner_id] = @OwnerID";
    using (var com = new SqlCommand(query, con))
    {
        com.Parameters.AddWithValue("@OwnerID", Login1.UserName);
        using (var da = new SqlDataAdapter(com))
        {
            var ds = new DataSet();
            da.Fill(ds);
            Console.WriteLine(ds.Tables[0].Rows[0][0]);
        }
    }
}