【问题标题】:Upload text, image to database using textBox and fileUpload使用 textBox 和 fileUpload 将文本、图像上传到数据库
【发布时间】:2013-07-09 21:03:52
【问题描述】:

大家好 我正在尝试使用 C# 创建一个 asp.net 网页来上传有关包含产品名称、描述、图像和产品编号的产品的详细信息。

protected void btnSubmit_Click(object sender, EventArgs e)
{
    string path = Server.MapPath("ProductsImages/");
    if (FileUpload1.HasFile)
    {
        string ext = Path.GetExtension(FileUpload1.FileName);
        if (ext == ".jpg" || ext == ".png")
        {
            FileUpload1.SaveAs(path + FileUpload1.FileName);
            string name = "~/ProductsImages/" + FileUpload1.FileName;
            string s = " insert into Products values('" + txtProductName.Text.Trim() + txtDescription.Text.Trim() + txtPrice.Text.Trim() + txtProductNumber.Text.Trim() + "','" + name + "')";


            SqlCommand cmd = new SqlCommand(s, con);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            Response.Write("Your File Has Been Uploaded");
        }
        else 
        {
            Response.Write("You can upload only Jpg and png file");
        }
    }
    else 
    {
        Response.Write("Please Select an file To upload");
    }
}

但是当我开始调试时,它显示一个错误:SqlException: 列名或提供的值的数量与表定义不匹配。

但是,我的数据库设计: 列名 |数据类型 名称 nvarchar(50) 说明 nvarchar(50) 价格 nvarchar(50) 图像图像 Product_Number nvarchar(50)

我不知道哪里错了,代码还是数据库??

【问题讨论】:

标签: c# asp.net sql web


【解决方案1】:

在您正在创建 SQL 命令的行上放置一个断点。当断点被命中时,检查变量s 的值。您的问题将变得很明显:您所做的只是将几个字段连接到一个字符串中。如果您正确拆分它们,它应该可以工作。

另一方面,无论如何,您都不应该构建这样的查询。使用 SqlParameters 正确构建和转义查询。

【讨论】:

  • 如果您想了解更多关于使用参数化查询的信息,这里有一个简单的示例:dotnetperls.com/sqlparameter
  • 谢谢你,我已经尝试过设置断点,但我也无法读取错误......无论如何,谢谢......
【解决方案2】:

您的插入查询缺少逗号。

应该是:

string s = " insert into Products values('" + txtProductName.Text.Trim() + "', '" + txtDescription.Text.Trim() + "', " + txtPrice.Text.Trim() + ", " + txtProductNumber.Text.Trim())";

不过,最好使用SqlParameters。以下是我的做法:

var queryInsert = "Insert Into Products Values (@productName, @productDescription, @productPrice, @productNumber)";

cmd.Parameters.AddWithValue("@productName", txtProductName.Text.Trim());
cmd.Parameters.AddWithValue("@productDescription", txtDescription.Text.Trim());

...你明白了。您可以像我上面那样为每个参数设置参数。

【讨论】:

  • 谢谢,但还有一个问题,如果我需要用 SqlParameter 来做,我需要为它创建一个存储过程,对吗?无论如何,它是否安全并不重要,这只是我必须做的任务。谢谢你,我真的很感谢你帮助我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2019-08-02
  • 1970-01-01
  • 2011-04-21
  • 2015-09-18
相关资源
最近更新 更多