1

我有一个 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");
        }



     }
}
4

1 回答 1

0

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

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

  • 如果您总是比较相同的值,请使用 switch/case 而不是 if/else if/else if 模式,请参阅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”。
  • 如果您提供了 SQL 命令作为参数(即上面的插入字符串),则无需添加 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
        }
    }
}
于 2013-01-20T15:38:05.917 回答