为什么我在ASP.NET中获得System.Data.SqlClient.SqlInternalConnection.OnError ...?

时间:2016-03-31 00:07:37

标签: c# asp.net visual-studio webforms

我是ASP.NET新手,我正在尝试将我的Web表单数据保存到数据库中。我已经使用Aspx文件测试了数据库表连接,并在浏览器中正确地将表的数据(手动输入的数据)加载到表中。

但是,当我填写表单并按“保存”时,我收到此错误:Screenshot of error message

这是我的aspx.cs.代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
 {
    if(IsPostBack)
        {

        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString);
        conn.Open();


        Response.Write("Database connection successful");


        conn.Close();
    }

}



protected void Button2_Click(object sender, EventArgs e)
{
    Response.Write("Database connection successful");

}

protected void Button1_Click(object sender, EventArgs e)
{
    try
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString);
        conn.Open();

        string insertQuery = "insert into Table (Name, Address, Phone, Email, Source, Message) values (@name, @address, @phone, @email, @source, @message");
        SqlCommand com = new SqlCommand(insertQuery, conn);
        com.Parameters.AddWithValue("@name", Name.Text);
        com.Parameters.AddWithValue("@address", Address.Text);
        com.Parameters.AddWithValue("@phone", Phone.Text);
        com.Parameters.AddWithValue("@email", Email.Text);
        com.Parameters.AddWithValue("@source", Source.SelectedItem.ToString());
        com.Parameters.AddWithValue("@message", "text");

        com.ExecuteNonQuery();

        Response.Write("Data is saved");

        conn.Close();


    }

    catch (Exception ex)
    {

        Response.Write("Error:" + ex.ToString());

    }


}
}

我的错误说明了这一点:

System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource)中的System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,Boolean breakConnection,Action 1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource 1完成,Int32超时,任务和任务,布尔asyncWrite) `1完成,String methodName,布尔sendToPipe,Int32超时,布尔asyncWrite)在System.Data.SqlClient.SqlCommand.ExecuteNonQuery()at _Default.Button1_Click(Object sender,EventArgs e)在D:\ documents \ visual studio 2015 \ WebSites中\查询跟踪Sys \ Default.aspx.cs:第45行ClientConnectionId:6c142f6c-40d7-4977-b75d-8fb0d774b0c6错误号码:156,状态:1,类:15

4 个答案:

答案 0 :(得分:2)

修改:可能的问题可能包括禁用用户,禁用混合模式或用户没有DB权限

  1. 对于混合模式身份验证:http://www.lansweeper.com/kb/23/SQLserver-enable-mixed-authentication.html

  2. 要为您的用户名分配权限,请执行以下操作:

    使用YourDatabase

    exec sp_addrolemember'db_owner','UserName'

  3. 您的命名管道配置可能存在错误/损坏。尝试重置或仅使用TCP / IP我想。

    除此之外,您在插入语句中缺少右括号。

     string insertQuery = "insert into Table (Name, Address, Phone, Email, Source, Message) values (@name, @address, @phone, @email, @source, @message)";
    

    而且,你的桌子名称是“桌子”吗?看起来很奇怪。

答案 1 :(得分:0)

传输级别错误通常与正在断开的sql server的连接有关...通常是网络。

当sql查询运行时间过长时,通常会抛出超时过期。

因此,我将对您的Sql Server链接进行故障排除,然后监视以查看哪些查询超时。

听起来像SQL作业正在运行,备份?这可能是锁定表或重新启动服务。

Connection problems with SQL Server in ASP.NET applications using out-of-process session state

答案 2 :(得分:0)

    public partial class Main : System.Web.UI.Page
{
    //SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString);
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\my\Documents\Visual Studio 2013\Projects\DataBase\DataBase\App_Data\List.mdf;Integrated Security=True");
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("insert into [Table](Id,fname,lname) values('"+TextBox3.Text+"','"+TextBox1.Text+"','"+TextBox2.Text+"')",con);
        cmd.ExecuteNonQuery();
        con.Close();
        Label1.Visible = true;
        Label1.Text = "Data Stored!!";
        TextBox1.Text = "";
        TextBox2.Text = "";

    }
}

}

尝试使用此代码,它是我的工作。并避免使用连接字符串。 并在web.config文件夹中删除<connection> </connection>标记的内容。 对于数据源,您将在您正在使用的数据库的属性中找到它。 SQL命令与我们以前输入的内容略有不同。

答案 3 :(得分:0)

我们使用IIS中的服务帐户来运行特定服务。就我而言,其中一个SQL存储过程缺少必需的服务帐户权限。我们向存储过程添加了权限,应用程序开始工作。