使用MultiView注册不起作用

时间:2012-07-19 06:43:39

标签: asp.net sql-server-2008 multiview

我有一个MultiView来添加有3个视图的员工。请让我知道正确的方法。这是我制作的代码不好的代码。每次修改内容时都会出现新的错误。

抱歉,我无法在此处发布代码。这是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");
        }



     }
}

1 个答案:

答案 0 :(得分:0)

您将在此处遇到的主要问题是,如上所述,您没有在第一个或第二个视图的插入查询中提供正确数量的参数。

一些可能对您有帮助的一般指示 -

  • 使用switch / case而不是if / else if / else if pattern如果你总是比较相同的值,请参阅http://msdn.microsoft.com/en-us/library/vstudio/06tc147t.aspx
  • 始终对if语句使用花括号,即使它是单行,它也可以帮助您直观地扫描代码并理解结构。
  • cmd.CommandType = CommandType.Text不需要,因为这是默认值,但如果您认为它提高了可读性,则可以包含它
  • 不要在SqlCommand cmd = new SqlCommand(“insertstring”,conn)中的insertstring周围加上引号 - 而不是你已创建的字符串变量insertstring,使用引号会将SQL命令保留为字面意思“insertstring”。 / LI>
  • 如果您已将SQL命令作为参数提供(即上面的inserttring),则无需添加cmd.CommandText = insertstring;
  • 在代码中使用有意义的ID,例如TextBox9包含什么? Button2的功能是什么?不得不去查看它会使代码难以维护和更新。
  • 确保使用asp:Label控件标记前端的文本框,并将AssociatedControlID设置为TextBox ID。
  • 确保您验证提供了所需的用户输入(使用必填字段验证程序)以及所需的类型和长度(在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
        }
    }
}