C# 通过文本框将SQL数据插入ASP.Net Web应用程序中的表中
我在Default.aspx页面上添加了SqlDataSource1,这似乎是成功的,因为我可以在gridview中看到用户表的列名。该表是空的,我所要做的就是在文本框中获取输入并将其发送到UserName列。 我不太擅长调试,但我注意到了一些错误,我花了几个小时研究这些错误。 我尝试过的事情:C# 通过文本框将SQL数据插入ASP.Net Web应用程序中的表中,c#,sql,asp.net,sql-server-2012,visual-studio-2017,C#,Sql,Asp.net,Sql Server 2012,Visual Studio 2017,我在Default.aspx页面上添加了SqlDataSource1,这似乎是成功的,因为我可以在gridview中看到用户表的列名。该表是空的,我所要做的就是在文本框中获取输入并将其发送到UserName列。 我不太擅长调试,但我注意到了一些错误,我花了几个小时研究这些错误。 我尝试过的事情: SQL SMS>工具>选项>设计器>检查阻止保存需要重新创建表的更改 增加使用系统数据 增加cmd.Connection.Open() 在catch语句中添加了要捕获的异常 重新创建整个数据库 四重检
- SQL SMS>工具>选项>设计器>检查阻止保存需要重新创建表的更改
- 增加使用系统数据李>
- 增加cmd.Connection.Open()李>
- 在catch语句中添加了要捕获的异常
- 重新创建整个数据库
- 四重检查,例如txtUsername是正确的文本框ID
- 反复重新配置SqlDataSource1,删除并重新创建
- 确认web.config中的connectionString是正确的
- 使用web.config中的确切字符串创建新的SQLConnection
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.Sql; using System.Data.SqlClient; namespace todoassignment1 { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Label1.Visible = false; } protected void btnSubmit_Click(object sender, EventArgs e) { string valueUser = txtUsername.Text; SqlConnection db = new SqlConnection(SqlDataSource1.ConnectionString); SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.Text; //User is the name of the table, UserName is the column cmd.CommandText = "INSERT User (UserName) VALUES ('" + valueUser + "')"; cmd.Connection = db; db.Open(); try { cmd.Connection.Open(); cmd.ExecuteNonQuery(); Label1.Text = "Success writing into database!"; Label1.Visible = true; } catch (Exception ex) { Label1.Text = "Error writing into database."; Console.WriteLine(ex.Message); Label1.Visible = true; } finally { db.Close(); } } } }
- 将插入行从串联更改为“插入用户(用户名)值('asdf')”以简化代码,但仍然不起作用
- 尝试了其他语法
SqlConnection db = new SqlConnection("Data Source=NAME-PC\\SQLEXPRESS;Initial Catalog=Assignment;Integrated Security=True");
- 在autos中挖掘cmd时,看到几个“System.InvalidCastException”
- 错误CS0103:当前上下文中不存在名称“ExecuteOnQuery”
- 运行后始终查看系统。无效操作异常
cmd.CommandText = "INSERT INTO User (UserName) VALUES (@username)";
cmd.Parameters.Add("@username", SqlDbType.NVarChar, 50);
cmd.Parameters["@username"].Value = txtUsername.Text.ToString();
有几个问题
insert INTO TABLE(COLUMNS)VALUES(VALUES)
您有“insert User(UserName)”USER
是SQL中的保留字。如果坚持将其用作表名,则必须将其括在方括号中如果您修改了我附加的方法,您应该能够复制粘贴它。我认为这是第二个问题,因为我已经尝试了第一个建议。我创建了一个名为Person而不是User的新表,对其进行了轻微修改以获得电子邮件,最后它接受了我的输入。非常感谢!您应该检查并阻止我们ing
.AddWithValue()
-这可能会导致意外的结果…@marc_理解。我不再费心写这样的查询了,现在大多使用简洁的方式。谢谢你的链接,我会仔细阅读的。
static void BtnSubmit_Click(object sender, EventArgs e)
{
string valueUser = "test"; //txtUsername.Text;
using (SqlConnection db = new SqlConnection("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=test;Integrated Security=True"))//SqlDataSource1.ConnectionString);
{
SqlCommand cmd = new SqlCommand("INSERT INTO dbo.[User] (UserName) VALUES (@valueUser)", db);
cmd.Parameters.Add("@valueUser", SqlDbType.VarChar, 50).Value = valueUser;
//cmd.CommandType = CommandType.Text;
//User is the name of the table, UserName is the column
//cmd.CommandText = "INSERT User (UserName) VALUES (@valueUser)";
//cmd.Connection = db;
db.Open();
try
{
//cmd.Connection.Open();
cmd.ExecuteNonQuery();
/*Label1.Text =*/
Console.WriteLine("Success writing into database!");
//Label1.Visible = true;
}
catch (Exception ex)
{
/*Label1.Text =*/
Console.WriteLine("Error writing into database.");
Console.WriteLine(ex.Message);
//Label1.Visible = true;
}
//finally
//{
//db.Close();
//}
}
}