我最初将数据库中图像列的数据类型设置为图像,但此后我将其更改为VARBINARY(MAX)。但是,当我尝试运行我的代码并上传图像以存储在该列中时,每条记录都显示为NULL。我相信数据库很好,问题必须是我如何将图像数据传递到SQL查询。所以我的问题是:我需要修改什么才能以正确的格式将图像上传到数据库?计划实施图像检索。
这是数据库的样子。我包括了列名,数据类型以及选择行时得到的结果。我尝试上传图片时没有返回任何错误。当列DOES允许空值时,每个记录都尝试上传图像。
以下是"添加"的代码。处理与数据库通信的按钮。我试图删除与此问题无关的任何内容,例如关闭表单。
private void addButton_Click(object sender, EventArgs e)
{
string strConnect = @"Server=mainserver\SQLEXPRESS; Database=Inventory; Integrated Security=SSPI;";
SqlConnection con = new SqlConnection(strConnect);
DatabaseUtility db = new DatabaseUtility();
string sqlStart = @"INSERT INTO Vehicles(manufacturer, model, date_Acquired, vin, year, cost";
string sqlEnd = @" VALUES('" + makeBox.Text + "', '" + modelBox.Text + "', '" + datePicker.Text +
"', '" + vinBox.Text + "', '" + yearBox.Text + "', '" + costBox.Text;
string sql;
if (vinBox.TextLength != 17)
{
MessageBox.Show("The VIN entered is invalid", "Invalid VIN");
}
else if (String.IsNullOrWhiteSpace(makeBox.Text) || String.IsNullOrWhiteSpace(modelBox.Text) ||
String.IsNullOrWhiteSpace(yearBox.Text) || String.IsNullOrWhiteSpace(vinBox.Text) ||
String.IsNullOrWhiteSpace(costBox.Text))
{
MessageBox.Show("Not all required fields are filled", "Missing Information");
}
else
{
if (!String.IsNullOrWhiteSpace(askingBox.Text))
{
sqlStart += ", asking_Price";
sqlEnd += "', '" + askingBox.Text;
}
if (!String.IsNullOrWhiteSpace(categoryComboBox.Text))
{
sqlStart += ", category";
sqlEnd += "', '" + categoryComboBox.Text;
}
if (!String.IsNullOrWhiteSpace(additionalNotesBox.Text))
{
sqlStart += ", additional_Notes";
sqlEnd += "', '" + additionalNotesBox.Text;
}
if (!openFileDialog1.CheckFileExists)
{
sqlStart += @", image";
sqlEnd += "', '@image";
}
sqlStart += ")";
sqlEnd += "')";
sql = sqlStart + sqlEnd;
SqlCommand insertCommand = new SqlCommand(sql, con);
if (!openFileDialog1.CheckFileExists)
{
SqlParameter sqlParam = insertCommand.Parameters.AddWithValue("@image", (object)GetImage(openFileDialog1.FileName));
sqlParam.DbType = DbType.Binary;
}
try
{
MessageBox.Show(insertCommand.ToString(), "Invalid Input");
con.Open();
insertCommand.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
MessageBox.Show("error in insertcommand" + ex, "Invalid Input");
}
finally
{
insertCommand.Connection.Close();
}
}
}
答案 0 :(得分:2)
您尝试使用FileDialog.CheckFileExists
检查所选文件是否存在,但此属性不起作用 - 它获取一个值,指示如果用户指定的文件名,对话框是否显示警告不存在。
因此,如果该属性设置为true
- 并且这是OpenFileDialog
的默认值 - 那么添加参数@image
的代码将永远不会被执行。< / p>
如果要检查文件是否存在,可以使用File.Exists