无法将图片保存到数据库

本文关键字:保存 数据库 | 更新日期: 2023-09-27 18:36:50

Database is .mdf,列的数据类型为 varchar<<必须用作项目要求

我输入从txtFilePath.Text = open.FileName;生成的textFilePath.text,但是当我按下按钮输入时它会出错。行cmd.CommandText上显示的错误是

Sqlexception未处理:字符串或二进制数据将被截断。该语句已终止。

但是,如果我用其他字符串替换textFilePath.text,则输入数据库将是成功的。

这是代码,谢谢你帮助我。

private void Save()
{
    txtFilePath.Text.ToString();
    cn.Open();
    cmd.CommandText = "insert into Inventory (ID,Item,Gender,Qty,Price,FilePath) values('" + txtID.Text + "','" + txtItem.Text + "','" + Gender + "','" + numQty.Value + "','" + numPrice.Value + "','" + txtFilePath.Text + "')";
    cmd.ExecuteNonQuery();
    cmd.Clone();
    cn.Close();
}
private void ButtonChoose_Click(object sender, EventArgs e)
{
    try
    {
        // open file dialog
        OpenFileDialog open = new OpenFileDialog();
        // image filters
        open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp";
        if (open.ShowDialog() == DialogResult.OK)
        {
            // display image in picture box
            pictureBox1.Image = new Bitmap(open.FileName);
            // image file path
            txtFilePath.Text = open.FileName;
        }
    }
    catch (Exception)
    {
        throw new ApplicationException("Image loading error....");
    }
}
private void buttonSave_Click(object sender, EventArgs e)
{
    if (txtID.Text != "" & txtItem.Text != "" & Gender != "" & numPrice.Value > 0 & numQty.Value > 0 & txtFilePath.Text != "")
    {
        Save();
        MessageBox.Show("Recorded");
        gridViewLoad();
    }
    else
    {
        MessageBox.Show("all field must be filled");
    }
}

无法将图片保存到数据库

正如金龙所说,错误是您正在尝试插入到表中 清单大于表字段允许大小的字符串

要解决这个问题,您应该增加数据库中字段 FilePath 的大小


同样重要的是要指出,使用字符串串联运行查询是一个巨大的安全漏洞,有关详细信息,请参阅 SQL 注入。

应始终使用参数化查询,如示例中所示:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(commandText, connection);
    command.Parameters.Add("@ID", SqlDbType.Int);
    command.Parameters["@ID"].Value = customerID;
    // Use AddWithValue to assign Demographics.
    // SQL Server will implicitly convert strings into XML.
    command.Parameters.AddWithValue("@demographics", demoXml);
    try
    {
        connection.Open();
        Int32 rowsAffected = command.ExecuteNonQuery();
        Console.WriteLine("RowsAffected: {0}", rowsAffected);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

来自: MSDN - SqlCommand.Parameters Property

该示例还演示了如何将连接与 using (避免在发生错误时不关闭连接)一起使用。

在您的情况下,它将是:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    string commandText = "insert into Inventory (ID,Item,Gender,Qty,Price,FilePath) values(@ID, @Item, @Gender, @Qty, @Price, @FilePath)";
    SqlCommand command = new SqlCommand(commandText, connection);
    command.Parameters.Add("@ID", SqlDbType.Int).Value = txtID.Text;
    ...
    command.Parameters.Add("@Price", SqlDbType.Decimal, 11, 4).Value = numPrice.Value;
    ...
    connection.Open();
    command.ExecuteNonQuery();
}

@Eka Soedono 请尝试以下代码,让我知道它是否有效。

cmd.CommandText = "insert into Inventory (ID,Item,Gender,Qty,Price,@path); 
cmd.Parameters.Add("@path",txtFilePath.Text);