1

3 つのビューを持つ従業員を追加する MultiView があります。正しい方法を教えてください。これは、私が作成した、機能していない貧弱なコードです。何かを変更するたびに、新しいエラーが発生します。

申し訳ありませんが、ここにコードを投稿できません。これはASP.NETフォーラムの投稿です

http://forums.asp.net/t/1825476.aspx/1?Registration+using+MultiView+not+working+

namespace EmployeeMultiView.AdminPages
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
                MultiView1.ActiveViewIndex = 0;
        }

        private void InsertInfo()
        {
            String KKSTechConnectionString = @"Data Source=USER-PC\SQLEXPRESS;Initial Catalog=KKSTech;Integrated Security=True";
            SqlConnection conn = new SqlConnection(KKSTechConnectionString);
            //Session["sessFirstName"] = Request["textbox1"];

               try
                {
                conn.Open();
                String insertstring = @"Insert INTO Emp
                (EmpID,FirstName,LastName,MiddleName,Mob1,Mob2,Phone,Email1,Email2,EmpDesc,Accno,IFSCCode,Branch,ApproxUnitPrice)
                values (@EmpID,@FirstName,@LastName,@MiddleName,@Mob1,@Mob2,@Phone,@Email1,@Email2,@EmpDesc,@Accno,@IFSCCode,@Branch,@ApproxUnitPrice)";



                if (MultiView1.ActiveViewIndex == 0)
                {
                    SqlCommand cmd = new SqlCommand("insertstring", conn);
                    cmd.CommandText = insertstring;
                    cmd.CommandType = CommandType.Text;

                    cmd.Parameters.AddWithValue("@EmpID", TextBox1.Text);
                    cmd.Parameters.AddWithValue("@FirstName", TextBox2.Text);
                    cmd.Parameters.AddWithValue("@LastName", TextBox3.Text);
                    cmd.Parameters.AddWithValue("@MiddleName", TextBox4.Text);
                    cmd.Parameters.AddWithValue("@Mob1", TextBox5.Text);
                    cmd.Parameters.AddWithValue("@Mob2", TextBox6.Text);
                    cmd.Parameters.AddWithValue("@Phone", TextBox7.Text);
                    cmd.Parameters.AddWithValue("@Email1", TextBox8.Text);
                    cmd.Parameters.AddWithValue("@Email2", TextBox9.Text);
                    cmd.Parameters.AddWithValue("@EmpDesc", TextBox10.Text);
                  }

                else if (MultiView1.ActiveViewIndex == 1)
                {
                    SqlCommand cmd2 = new SqlCommand("insertstring", conn);
                    cmd2.CommandText = insertstring;
                    cmd2.CommandType = CommandType.Text;

                    cmd2.Parameters.AddWithValue("@Accno", TextBox11.Text);
                    cmd2.Parameters.AddWithValue("@IFSCCode", TextBox12.Text);
                    cmd2.Parameters.AddWithValue("@Branch", TextBox13.Text);
                    cmd2.Parameters.AddWithValue("@ApproxUnitPrice", TextBox16.Text);
                    cmd2.ExecuteNonQuery();
                }
                else if (MultiView1.ActiveViewIndex == 2)
                {
                    if (FileUpload1.HasFile)
                    {
                        byte[] productImage = FileUpload1.FileBytes;



                        String insertstring2 = @"Insert INTO Cert (CertName, CertLogo)
                                                         values(@CertName, @CertLogo)";

                        SqlCommand cmd3 = new SqlCommand("insertstring2", conn);
                        cmd3.CommandText = insertstring2;
                        cmd3.CommandType = CommandType.Text;

                        cmd3.Parameters.AddWithValue("@CertName", TextBox18.Text);
                        cmd3.Parameters.Add("@CertLogo", SqlDbType.VarBinary).Value = productImage;

                        cmd3.ExecuteNonQuery();
                    }
                }
           }

            catch (System.Data.SqlClient.SqlException ex)
            {

                string msg = "Insert Error:";
                msg += ex.Message;
                throw new Exception(msg);
            }

            finally
            {
                Session.Abandon();
                conn.Close();
            }

        }
        protected void Button1_Click(object sender, EventArgs e)
        {


            InsertInfo();
            MultiView1.ActiveViewIndex += 1;

        }
protected void Button2_Click(object sender, EventArgs e)
        {
            MultiView1.ActiveViewIndex -= 1;
        }

        protected void Button5_Click(object sender, EventArgs e)
        {
            Response.Write("Successful");
        }



     }
}
4

1 に答える 1

0

ここで発生する主な問題は、書かれているように、最初または 2 番目のビューの挿入クエリに正しい数のパラメーターを指定していないことです。

あなたを助けるかもしれないいくつかの一般的な指針 -

  • 常に同じ値を比較する場合は、if/else if/else if パターンではなく switch/case を使用します。http://msdn.microsoft.com/en-us/library/vstudio/06tc147t.aspxを参照してください。
  • if ステートメントには常に中かっこを使用します。1 行であっても、コードを視覚的にスキャンして構造を理解するのに役立ちます。
  • cmd.CommandType = CommandType.Text はデフォルト値であるため必要ありませんが、読みやすさが向上すると思われる場合は含めることができます
  • SqlCommand cmd = new SqlCommand("insertstring", conn) の insertstring を引用符で囲まないでください。既に作成した文字列変数 insertstring の代わりに、引用符を使用すると、SQL コマンドが文字通り "insertstring" のままになります。
  • 引数として SQL コマンド (つまり、上記の挿入文字列) を指定した場合、cmd.CommandText = insertstring; を追加する必要はありません。
  • コードで意味のある ID を使用します。たとえば、TextBox9 は何を保持していますか? Button2 の機能は何ですか? 行って調べる必要があると、コードの保守と更新が難しくなります。
  • AssociatedControlID を TextBox ID に設定した asp:Label コントロールを使用して、フロント エンドでテキスト ボックスにラベルを付けていることを確認してください。
  • 必要なユーザー入力が提供されていること (必須フィールド バリデーターを使用)、および必要な型と長さ (TextBox コントロールの MaxLength をデータベースのフィールド長と一致するように設定) であることを検証していることを確認してください。

あなたのフロントエンドコードは次のようなものだと思います-

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="EmployeeMultiView.AdminPages._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:MultiView ID="MultiView1" runat="server">
            <asp:View runat="server">
                <asp:Label AssociatedControlID="TextBox1" runat="server" Text="Label Text for TextBox1"></asp:Label>
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox2" runat="server" Text="Label Text for TextBox2"></asp:Label>
                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox3" runat="server" Text="Label Text for TextBox3"></asp:Label>
                <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox4" runat="server" Text="Label Text for TextBox4"></asp:Label>
                <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox5" runat="server" Text="Label Text for TextBox5"></asp:Label>
                <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox6" runat="server" Text="Label Text for TextBox6"></asp:Label>
                <asp:TextBox ID="TextBox6" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox7" runat="server" Text="Label Text for TextBox7"></asp:Label>
                <asp:TextBox ID="TextBox7" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox8" runat="server" Text="Label Text for TextBox8"></asp:Label>
                <asp:TextBox ID="TextBox8" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox9" runat="server" Text="Label Text for TextBox9"></asp:Label>
                <asp:TextBox ID="TextBox9" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox10" runat="server" Text="Label Text for TextBox10"></asp:Label>
                <asp:TextBox ID="TextBox10" runat="server"></asp:TextBox>
            </asp:View>
            <asp:View runat="server">
                <asp:Label AssociatedControlID="TextBox11" runat="server" Text="Label Text for TextBox11"></asp:Label>
                <asp:TextBox ID="TextBox11" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox12" runat="server" Text="Label Text for TextBox12"></asp:Label>
                <asp:TextBox ID="TextBox12" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox13" runat="server" Text="Label Text for TextBox13"></asp:Label>
                <asp:TextBox ID="TextBox13" runat="server"></asp:TextBox>
                <asp:Label AssociatedControlID="TextBox16" runat="server" Text="Label Text for TextBox16"></asp:Label>
                <asp:TextBox ID="TextBox16" runat="server"></asp:TextBox>
            </asp:View>
            <asp:View runat="server">
                <asp:Label AssociatedControlID="FileUpload1" runat="server" Text="Label Text for FileUpload1"></asp:Label>
                <asp:FileUpload ID="FileUpload1" runat="server" />
                <asp:Label AssociatedControlID="TextBox18" runat="server" Text="Label Text for TextBox18"></asp:Label>
                <asp:TextBox ID="TextBox18" runat="server"></asp:TextBox>
            </asp:View>
        </asp:MultiView>

        <asp:Button ID="Button1" OnClick="Button1_Click" runat="server" Text="Next" />
        <asp:Button ID="Button2" OnClick="Button2_Click" runat="server" Text="Previous" />
    </div>
    </form>
</body>
</html>

その場合、私はあなたのコードビハインドを次のように書きます-

using System;
using System.Data.SqlClient;
using System.Data;

namespace EmployeeMultiView.AdminPages
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                MultiView1.ActiveViewIndex = 0; //Even though you don't need braces here it helps readability
            }
        }

        private void InsertInfo()
        {
            String KKSTechConnectionString = @"Data Source=USER-PC\SQLEXPRESS;Initial Catalog=KKSTech;Integrated Security=True";
            //Store connection strings in your web.config file wherever possible

            //Session["sessFirstName"] = Request["textbox1"];

            try
            {
                //Move connection so we don't open it unless we have to
                string insertstring = @"Insert INTO Emp (EmpID,FirstName,LastName,MiddleName,Mob1,Mob2,Phone,Email1,Email2,EmpDesc,Accno,IFSCCode,Branch,ApproxUnitPrice)
                values (@EmpID,@FirstName,@LastName,@MiddleName,@Mob1,@Mob2,@Phone,@Email1,@Email2,@EmpDesc,@Accno,@IFSCCode,@Branch,@ApproxUnitPrice)";

                //Use switch/case to compare multiple values (see http://msdn.microsoft.com/en-us/library/vstudio/06tc147t.aspx)
                switch (MultiView1.ActiveViewIndex)
                {
                    case 0:
                        //Need all the SQL parameters so we don't try to insert to the database here
                        break;
                    case 1:
                        using (SqlConnection conn = new SqlConnection(KKSTechConnectionString))
                        {
                            SqlCommand cmd = new SqlCommand(insertstring, conn);
                            //cmd2.CommandText = insertstring; - also redundent
                            //cmd2.CommandType = CommandType.Text; - this is the default value so not needed

                            //Add the parameters from the first view here, these will rely on ViewState which must be enabled
                            cmd.Parameters.AddWithValue("@EmpID", TextBox1.Text);
                            cmd.Parameters.AddWithValue("@FirstName", TextBox2.Text);
                            cmd.Parameters.AddWithValue("@LastName", TextBox3.Text);
                            cmd.Parameters.AddWithValue("@MiddleName", TextBox4.Text);
                            cmd.Parameters.AddWithValue("@Mob1", TextBox5.Text);
                            cmd.Parameters.AddWithValue("@Mob2", TextBox6.Text);
                            cmd.Parameters.AddWithValue("@Phone", TextBox7.Text);
                            cmd.Parameters.AddWithValue("@Email1", TextBox8.Text);
                            cmd.Parameters.AddWithValue("@Email2", TextBox9.Text);
                            cmd.Parameters.AddWithValue("@EmpDesc", TextBox10.Text);

                            cmd.Parameters.AddWithValue("@Accno", TextBox11.Text);
                            cmd.Parameters.AddWithValue("@IFSCCode", TextBox12.Text);
                            cmd.Parameters.AddWithValue("@Branch", TextBox13.Text);
                            cmd.Parameters.AddWithValue("@ApproxUnitPrice", TextBox16.Text);

                            conn.Open();
                            cmd.ExecuteNonQuery();
                        }
                        break;
                    case 2:

                        if (FileUpload1.HasFile)
                        {
                            byte[] productImage = FileUpload1.FileBytes;

                            String insertstring2 = @"Insert INTO Cert (CertName, CertLogo)
                                                     values(@CertName, @CertLogo)";

                            using (SqlConnection conn = new SqlConnection(KKSTechConnectionString))
                            {
                                SqlCommand cmd3 = new SqlCommand(insertstring2, conn); //No quotes
                                //cmd3.CommandText = insertstring2; - Redundant
                                //cmd3.CommandType = CommandType.Text; - this is the default value so not needed

                                cmd3.Parameters.AddWithValue("@CertName", TextBox18.Text);
                                cmd3.Parameters.Add("@CertLogo", SqlDbType.VarBinary).Value = productImage;

                                conn.Open();
                                cmd3.ExecuteNonQuery();
                            }
                        }
                        break;
                }
            }
            catch (SqlException ex)
            {
                string msg = "Insert Error:";
                msg += ex.Message;
                throw new Exception(msg);
            }
            finally
            {
                //Session.Abandon(); - this would run multiple times during the process
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            InsertInfo();
            //Don't try to set active view index to non-existant view
            if (MultiView1.ActiveViewIndex < MultiView1.Views.Count)
            {
                MultiView1.ActiveViewIndex += 1;
            }
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            //Assuming this is a "previous button" - may not need conditional if this is in the second view
            if (MultiView1.ActiveViewIndex > 0)
            {
                MultiView1.ActiveViewIndex -= 1;
            }
        }

        protected void Button5_Click(object sender, EventArgs e)
        {
            Response.Write("Successful");
            Session.Abandon(); //Move to end of operation
        }
    }
}
于 2013-01-20T15:38:05.917 に答える