如何使用文本区域将数据存储到数据库中

时间:2018-01-07 06:21:20

标签: asp.net

如何在数据库中存储数据。 它将显示以下异常

附加信息:程序或功能' spUploadImage'期望参数' @ detail',这是未提供的。

以下是Movies.aspx文件内容:

<html>
    <head>
        <script>
            var maxAmount = 250;
            function textCounter(textField, showCountField) {
                if (textField.value.length > maxAmount) {
                    textField.value = textField.value.substring(0, maxAmount);
                } else {
                    showCountField.value = maxAmount - textField.value.length;
                }
            }
        </script>
    </head>
    <body>
            <center>
                <asp:Label ID="label3" Text="Name of Movie: " runat="server"></asp:Label>
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /><br />

                <asp:Label ID="label4" Text="Details of Movie: " runat="server"></asp:Label><br />
                <textarea id="txtCommentBox" name="txtCommentBox" rows="6" style="width:340px;" onKeyDown="textCounter(this.form.txtCommentBox,this.form.countDisplay);" onKeyUp="textCounter(this.form.txtCommentBox,this.form.countDisplay);"></textarea>
                <br />
                <input readonly type="text" name="countDisplay" size="3" maxlength="3" value="250"> Characters Remaining
           <br />

                    <br />
                <asp:Label ID="label2" Text="Select Image of Movie: " runat="server"></asp:Label>
        <asp:FileUpload ID="FileUpload1" runat="server" />

        <br />
        <br />
        <asp:Button ID="Button1" runat="server" Text="Upload" OnClick="Button1_Click" />
        <br />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <br />
        <br />
        <asp:HyperLink ID="HyperLink1" runat="server">View Uploaded Image</asp:HyperLink>
 </center>

        </body>
    </html>
</asp:Content>

以下是Movies.aspx.cs文件内容:

   public partial class Movies : System.Web.UI.Page
  {
   protected void Page_Load(object sender, EventArgs e)
   {
    if(!IsPostBack)
    {
        Label1.Visible = false;
        HyperLink1.Visible = false;
    }
}
protected void Button1_Click(object sender, EventArgs e)
{

    string txt = TextBox1.Text;
    string text = Request.Form["txtCommentBox_1"];
    HttpPostedFile postedFile= FileUpload1.PostedFile;
    string fileName = Path.GetFileName(postedFile.FileName);
    string fileExtension = Path.GetExtension(fileName);
    int fileSize = postedFile.ContentLength;

    if(fileExtension.ToLower()==".jpg" || fileExtension.ToLower()==".png" || fileExtension.ToLower()==".bmp" || fileExtension.ToLower()==".gif")
    {
        Stream stream= postedFile.InputStream;
        BinaryReader binaryReader = new BinaryReader(stream);
        byte[] bytes = binaryReader.ReadBytes((int)stream.Length);
        string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
        using (SqlConnection con=new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand("spUploadImage",con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter paramName = new SqlParameter()
            {
                ParameterName = "@Name",
                Value = fileName
            };
            cmd.Parameters.Add(paramName);

            SqlParameter paramSize = new SqlParameter()
            {
                ParameterName = "@Size",
                Value = fileSize
            };
            cmd.Parameters.Add(paramSize);

            SqlParameter parammName = new SqlParameter()
            {
                ParameterName = "@mName",
                Value = txt
            };
            cmd.Parameters.Add(parammName);



            SqlParameter paramImageData = new SqlParameter()
            {
                ParameterName = "@ImageData",
                Value = bytes
            };
            cmd.Parameters.Add(paramImageData);

            SqlParameter paramdetail = new SqlParameter()
            {
                ParameterName = "@detail",
                Value = text
            };
            cmd.Parameters.Add(paramdetail);

            SqlParameter paramNewId = new SqlParameter()
            {
                ParameterName = "@NewId",
                Value = -1,
                Direction=ParameterDirection.Output
            };
            cmd.Parameters.Add(paramNewId);


            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();

            Label1.Visible = true;
            Label1.Text = "Upload Successful";
            Label1.ForeColor = System.Drawing.Color.Green;
            HyperLink1.Visible = true;
            HyperLink1.NavigateUrl = "~/Moviesimg.aspx?Id="+cmd.Parameters["@NewId"].Value.ToString();
        }
    }
    else
    {
        Label1.Visible = true;
        Label1.Text = "Only Images (.jpg, .png, .gif and .bmp) can be uploaded...";
        Label1.ForeColor = System.Drawing.Color.Red;
        HyperLink1.Visible = false;
    }
}

}

,存储过程如下:

  create proc spUploadImage

    @Name nvarchar(255),
    @Size int,
    @ImageData varbinary(max),
    @mName nvarchar(50),
    @detail nvarchar(300),
    @NewId int output
  as
    Begin
      Insert into tblImages 
      values(@Name,@Size,@mName,@detail,@ImageData)
      select @NewId = SCOPE_IDENTITY()
    End

但我希望从文本区域获取文本并存储在数据库中。 但它提出了一个例外...

2 个答案:

答案 0 :(得分:0)

如果您要将runat="server"设置为任何控件,那么控件必须放在带有runat="server"的表单标记内,如下所示

<html>
<body>
    <form id="form1" runat="server">
        <center>
            <textarea id="txtImagename1" name="txtImagename1" runat="server" rows="1" cols="50">
             </textarea>
                    <br />
        <asp:FileUpload ID="FileUpload1" runat="server" />
                <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
        <br />
        <br />
        <asp:Button ID="Button1" runat="server" Text="Upload" OnClick="Button1_Click" />
        <br />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <br />
        <br />
        <asp:HyperLink ID="HyperLink1" runat="server">View Uploaded Image</asp:HyperLink>
 </center>
    </form>
</body>
</html>

要在服务器端访问此功能,您只需使用InnerText的{​​{1}}属性,如下所示。

TextArea

如果需要,您也可以使用txtImagename1.InnerText 对象访问它,如下所示。

Form

为此,控件可以是简单的Request.Form["txtImagename1"] ,而不是TextArea属性。

答案 1 :(得分:0)

您缺少表单标记。使用ASP控件而不是普通的HTML控件 - 所有其他控件都是ASP,所以要保持一致。

runat

如果您的表单超过100 KB,则无法使用Request.Form集合:

msdn.microsoft.com/en-us/library/ms525985(v=vs.90).aspx