【问题标题】:Asp.net Form Inserting Data into Wrong Fields in DatabaseAsp.net 表单将数据插入数据库中的错误字段
【发布时间】:2016-10-18 10:34:30
【问题描述】:

我有一个 Asp.net 表单,用于将用户数据插入到使用 c# 的 .mdb 文件中。数据已成功输入,但未输入此人的电子邮件地址。相反,人名(第一个条目)被放置在数据库的电子邮件字段中,而不是在名称字段中放置任何内容。如何将电子邮件输入到电子邮件列(pEmail),将人名(pName)输入到数据库中的名称列?

表格代码:

    <form id="form1" runat="server">
    <div style="height: 138px">

        Enter Name:<asp:TextBox ID="TextBox1" runat="server" style="margin-left: 12px"></asp:TextBox>

        <asp:RequiredFieldValidator 
    id="reqName" 
    ControlToValidate="TextBox1"
    Style="color:Red"   
    ErrorMessage="Please enter your name!"
    runat="server"  />

        <br />
        Enter Email:&nbsp;&nbsp;&nbsp;
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

        <asp:RegularExpressionValidator 
    id="ValidEmail" 
    ControlToValidate="TextBox2" 
    Style="color:Red"
    ValidationExpression="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"
    ErrorMessage="Invalid Email Entry" 
    runat="server" />

        <br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit" />
        <br />
        <asp:Label ID="Label1" runat="server"></asp:Label>

    </div>
    </form>

数据库入口的c#代码:

using System.Data.OleDb;
using System.Configuration;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        OleDbConnection con = new OleDbConnection();
        con.ConnectionString = ConfigurationManager.ConnectionStrings["northwind"].ToString();
        con.Open();
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandText = "insert into[Table1](pName)values(@nm)";
        cmd.Parameters.AddWithValue("@nm", TextBox1.Text);
        cmd.CommandText = "insert into[Table1](pEmail)values(@nm)";
        cmd.Parameters.AddWithValue("@nm", TextBox2.Text);
        cmd.Connection = con;
        int a = cmd.ExecuteNonQuery();
        if (a>0)
        {
            Label1.Text = "Inserted Sucessfully!";
        }
    }
}

并且数据库只有两列供输入,一列称为 pName,第二列称为 pEmail。

【问题讨论】:

  • 使用一个 SQL 查询同时插入姓名和电子邮件。您所做的是尝试将电子邮件作为新记录插入,它不会与输入的名称相关联。
  • @DFord 哦,天哪,谢谢,我对此很陌生。

标签: c# asp.net database


【解决方案1】:

这是使用一个插入 SQL 查询的 C# 代码。

using System.Data.OleDb;
using System.Configuration;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        OleDbConnection con = new OleDbConnection();
        con.ConnectionString = ConfigurationManager.ConnectionStrings["northwind"].ToString();
        con.Open();
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandText = "insert into[Table1](pName, pEmail)values(@nm, @em)";
        cmd.Parameters.AddWithValue("@nm", TextBox1.Text);
        cmd.Parameters.AddWithValue("@em", TextBox2.Text);
        cmd.Connection = con;
        int a = cmd.ExecuteNonQuery();
        if (a>0)
        {
            Label1.Text = "Inserted Sucessfully!";
        }
    }
}

因为您正在用插入电子邮件的插入查询覆盖插入名称的插入查询。

但是,您应该使用相同的查询插入两个值,因为它们是同一记录的一部分。

【讨论】:

    【解决方案2】:

    我看到以下问题:

    cmd.CommandText = "insert into[Table1](pName)values(@nm)";
    cmd.Parameters.AddWithValue("@nm", TextBox1.Text);
    cmd.CommandText = "insert into[Table1](pEmail)values(@nm)";
    cmd.Parameters.AddWithValue("@nm", TextBox2.Text);
    

    您正在创建一个 SQL 语句,设置参数,然后用另一个 SQL 语句覆盖之前的 SQL 语句,并再次添加相同的参数但具有不同的值。然后,当您执行时,它只会执行您设置 CommandText 的最后一条 SQL 语句,并使用您添加的两个 @nm 参数中的第一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 2021-05-02
      相关资源
      最近更新 更多