C# 文本框中的值未插入到数据库C中
文本框中的值从未插入数据库。只有 现在,可以插入imageName、contentType和数据。 是否应在btncapture处插入文本框查询 有人能告诉我哪里出了问题吗?这个代码至少应该在一个按钮点击中C# 文本框中的值未插入到数据库C中,c#,asp.net,database,insert,add,C#,Asp.net,Database,Insert,Add,文本框中的值从未插入数据库。只有 现在,可以插入imageName、contentType和数据。 是否应在btncapture处插入文本框查询 有人能告诉我哪里出了问题吗?这个代码至少应该在一个按钮点击中 当在中调用page_load事件时,文本框将被清除。只有在不是回发的情况下才向DB提交 由于您仅在Page_Load中运行此功能,文本字段可能没有任何用户输入,因此为空。或者你可以在回邮时做 if (!this.IsPostBack) 或者,更好的做法是,按照Jeremy Thompson
当在中调用page_load事件时,文本框将被清除。只有在不是回发的情况下才向DB提交 由于您仅在Page_Load中运行此功能,文本字段可能没有任何用户输入,因此为空。或者你可以在回邮时做
if (!this.IsPostBack)
或者,更好的做法是,按照Jeremy Thompson的建议,在用户单击按钮时分配一个事件处理程序。在Page_Load中执行这种逻辑通常会在以后困扰您。当其他开发人员添加UpdatePanel或其他回发事件时会发生什么?然后,此代码将在每次回发时运行。它的伸缩性不太好。看起来你已经有了一个事件处理程序-btnCapture_Click,我建议你使用它
例如:
在HTML中:
if (this.IsPostBack)
{
// Do stuff
}
如果您在绑定按钮时遇到问题,可以查看
首先,检查您的aspx声明中是否有AutoEventWireup=true
您还可以尝试手动分配代理
protected void btnCapture_Click(object sender, EventArgs e)
{
if (Request.InputStream.Length > 0)
{
using (StreamReader reader = new StreamReader(Request.InputStream))
{
string hexString = Server.UrlEncode(reader.ReadToEnd());
string imageName = DateTime.Now.ToString("dd-MM-yy hh-mm-ss");
string imagePath = string.Format("~/losefound/{0}.png", imageName);
string ItemName = txtItemName.Text;
string Place = txtPlace.Text;
byte[] bytes = ConvertHexToBytes(hexString);
File.WriteAllBytes(Server.MapPath(imagePath), bytes);
string VisitorManagementConnectionString = ConfigurationManager.ConnectionStrings["VisitorManagementConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(VisitorManagementConnectionString))
{
string query = "INSERT INTO LostFound (ItemName, FoundAt, TimeIn, ImageName, ContentType, Data) VALUES(@ItemName, @FoundAt, @TimeIn, @ImageName, @ContentType, @Data);SELECT SCOPE_IDENTITY()";
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Connection = con;
cmd.Parameters.AddWithValue("@ItemName", ItemName);
cmd.Parameters.AddWithValue("@FoundAt", Place);
cmd.Parameters.AddWithValue("@TimeIn", DateTime.Now);
cmd.Parameters.AddWithValue("@ImageName", imageName);
cmd.Parameters.AddWithValue("@ContentType", "image/png");
cmd.Parameters.AddWithValue("@Data", bytes);
con.Open();
Session["CapturedImageId"] = cmd.ExecuteScalar();
con.Close();
}
}
}
}
}
你能分享一下存储过程吗?问题可能就在那里。ItemName和Place看起来像关键字,将其更改为不同的名称和位置check@smoksnes我已经复制粘贴了所有的代码你解决了吗?如果不是,请仔细阅读两个答案。您需要将保存到数据库的代码移动到按钮单击事件中。我看到您在问题中发布的其他代码,您确实意识到受保护的void btnCapture_Clickobject sender、EventArgs e event中没有任何内容,如@smoksnes所示。如果您在Visual Studio中使用调试器。txtItemName.Text的值是多少?一旦我调试直接跳转回发回,它就不会跳转到按钮
<asp:Button ID="Button1" runat="server" onclick="btnCapture_Click" Text="Button" />
protected void btnCapture_Click(object sender, EventArgs e)
{
if (Request.InputStream.Length > 0)
{
using (StreamReader reader = new StreamReader(Request.InputStream))
{
string hexString = Server.UrlEncode(reader.ReadToEnd());
string imageName = DateTime.Now.ToString("dd-MM-yy hh-mm-ss");
string imagePath = string.Format("~/losefound/{0}.png", imageName);
string ItemName = txtItemName.Text;
string Place = txtPlace.Text;
byte[] bytes = ConvertHexToBytes(hexString);
File.WriteAllBytes(Server.MapPath(imagePath), bytes);
string VisitorManagementConnectionString = ConfigurationManager.ConnectionStrings["VisitorManagementConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(VisitorManagementConnectionString))
{
string query = "INSERT INTO LostFound (ItemName, FoundAt, TimeIn, ImageName, ContentType, Data) VALUES(@ItemName, @FoundAt, @TimeIn, @ImageName, @ContentType, @Data);SELECT SCOPE_IDENTITY()";
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Connection = con;
cmd.Parameters.AddWithValue("@ItemName", ItemName);
cmd.Parameters.AddWithValue("@FoundAt", Place);
cmd.Parameters.AddWithValue("@TimeIn", DateTime.Now);
cmd.Parameters.AddWithValue("@ImageName", imageName);
cmd.Parameters.AddWithValue("@ContentType", "image/png");
cmd.Parameters.AddWithValue("@Data", bytes);
con.Open();
Session["CapturedImageId"] = cmd.ExecuteScalar();
con.Close();
}
}
}
}
}
btnCapture += new EventHandler(btnCapture_Click);