无法将图片保存到数据库
本文关键字:保存 数据库 | 更新日期: 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);