我是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
答案 0 :(得分:2)
修改:可能的问题可能包括禁用用户,禁用混合模式或用户没有DB权限
对于混合模式身份验证:http://www.lansweeper.com/kb/23/SQLserver-enable-mixed-authentication.html
要为您的用户名分配权限,请执行以下操作:
使用YourDatabase
去
exec sp_addrolemember'db_owner','UserName'
去
您的命名管道配置可能存在错误/损坏。尝试重置或仅使用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存储过程缺少必需的服务帐户权限。我们向存储过程添加了权限,应用程序开始工作。