2016-10-18 10 views
0

私は、C#を使用して.mdbファイルにユーザーデータを挿入するために使用しているAsp.netフォームを使用しています。データは正常に入力されましたが、その人の電子メールアドレスは入力されません。代わりに、名前(最初のエントリ)の人物が、データベースの電子メールフィールドに配置され、名前のフィールドには何も配置されません。電子メールの列(pEmail)に人名(pName)をデータベースの名前列に入力するにはどうすればよいですか?Asp.netフォームデータベース内の間違ったフィールドにデータを挿入する

フォームコード:データベースのエントリの

<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!"; 
     } 
    } 
} 

、データベースが唯一のエントリのための2つの列、1と呼ばれるはpNameとpEmailと呼ばれる第二を持っています。

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文をオーバーライドし、再度同じパラメータを追加することなく、異なる値としている:

+0

1つのSQLクエリを使用して、名前と電子メールを同時に挿入します。あなたのやっていることは、電子メールを新しいレコードとして挿入しようとしていて、それが入力された名前に関連付けられていないということです。 – DFord

+0

@Fordordああ、ありがとう、私はこれに非常に新しいです。 – penmas

答えて

2

ここには、挿入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!"; 
     } 
    } 
} 

メールを挿入している挿入クエリで名前を挿入する挿入クエリを上書きしているためです。

ただし、同じレコードの一部であるため、両方の値を同じクエリで挿入する必要があります。

1

は、私は次のような問題を参照してください。その後、実行すると、CommandTextを設定した最後のSQL文だけを実行し、追加した2つの@nmパラメータのうち最初のものを使用します。

関連する問題