首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MultiView注册不起作用

使用MultiView注册不起作用
EN

Stack Overflow用户
提问于 2012-07-19 06:43:39
回答 1查看 922关注 0票数 1

我有一个MultiView来添加具有3个视图的员工。请让我知道正确的方法。下面是我编写的不起作用的糟糕代码。每当我修改某件东西时,它都会产生新的错误。

对不起,我不能在这里贴代码。这是ASP.NET论坛上的帖子

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

代码语言:javascript
复制
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");
        }



     }
}
EN

回答 1

Stack Overflow用户

发布于 2013-01-20 15:38:05

这里您将遇到的主要问题是,正如所写的那样,您没有为第一个或第二个视图在insert查询中提供正确的参数数。

一些一般性的建议也许能帮助你-

  • 如果您总是比较相同的值,则使用开关/大小写,而不是if/else模式,请参见http://msdn.microsoft.com/en-us/library/vstudio/06tc147t.aspx
  • 请始终使用大括号表示if语句,即使它是一行,也可以帮助您直观地扫描代码并理解结构。
  • 不需要cmd.CommandType = CommandType.Text,因为这是默认值,但如果您认为它可以提高可读性,则可以将它包括在内。
  • 不要在SqlCommand cmd =新SqlCommand(“插入字符串”,康涅狄格)中围绕插入字符串放置引号--而不是您已经创建的字符串变量insertstring,使用引号将使您的SQL命令从字面上说是“插入字符串”。
  • 如果您已将SQL命令作为参数(即上面的插入字符串)提供,则不需要添加cmd.CommandText =插入字符串;
  • 在代码中使用有意义的in,例如TextBox9保存什么?Button2的功能是什么?必须去查看,这将使代码很难维护和更新。
  • 确保使用asp:Label控件将文本框标记在前端,并将AssociatedControlID设置为TextBox ID。
  • 确保您正在验证是否提供了所需的用户输入(使用所需的字段验证器)以及所需的类型和长度(在TextBox控件上设置MaxLength以匹配数据库中的字段长度)。

我假设你的前端代码是-

代码语言:javascript
复制
<%@ 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>

在这种情况下,我会像这样写你的代码-

代码语言:javascript
复制
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
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11555273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档